 |
白乔原创:实战软件DIY[4]
|
|
| |
| 3. 实战策略
确定了FlashNow!的功能需求之后,接下来就是系统设计的工作。很简单,“怎样解决用户需求所提出的问题”,“在多种解决方案中,哪一种方案最合适”,如此如此,就是具体的系统设计的过程。系统设计一般分成概要设计和详细设计,大抵是“逐步求精”的思路。
如何设计我们的FlashNow!呢?不要慌,我们从系统流程设计、系统模块设计和系统类设计三个方面入手。
3.1 系统流程设计
FlashNow!包括两个重要的流程,用户可以直接启动FlashNow!,或者从一个.swf文件关联过去;另一种方式,用户可以从文件夹的Shell菜单中选取“启动FlashNow!动画浏览器(F)”来启动FlashNow!,对应于不同的系统入口,FlashNow!的系统流程设计如下:
流程一(浏览视图):
流程二(查看视图):
流程很简单,但愿软件实现起来也同样的简单。
3.2 系统模块设计
总体来说FlashNow!可以分成以下几大模块:
² Flash动画播放控制模块
包括动画播放(Play)、停止(Stop)、跳转(Seek)、拖放(Drag)、放大(ZoomIn)、缩小(ZoomOut)、全屏显示(FullScreen)模块;包括动画循环播放、画面质量和动画背景色设置等模块;
² Explorer文件 ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-25 11:40:47.0,共阅读3299次,回复0次 |
|
|
 |
白乔原创:实战软件DIY[3]
|
|
| |
| 2. 实战部署
编码?别急。对程序员来说,编码是很惬意的事情(就象碰到咖啡和啤酒一样),但记住:不要急着编码。做好完整的实战部署,才能打好仗。
2.1 问题定义
为什么要开发FlashNow!?开发FlashNow!真的有必要吗?FlashNow!系统的开发真正可行吗?下面我们来具体分析一下需求产生的基本背景。
也许你使用过acdsee,很好的东西,acdsee是个很成功的案例,大量的收藏图片,合法的,或者不合法的,你都会想到使用acdsee来查看它,这就是acdsee成功的地方。那么,现在流行什么了?现在(实际上是去年、或者前年)流行起Flash动画了,追美眉的男生一定很清楚,阿贵系列的,snoopy系列的,流氓兔系列的,ShowGood MTV,还有更多的无厘头的MTV,都纷纷采用Flash动画格式,去网上随便走走,活灵活现的Flash广告比中关村的ITer还要多。
总之,Flash动画很流行了。Flash作为一种成熟的流式技术,给动画带来了丰富的声音、快的速度和吸引人的交互性,Flash让动画活起来了。有Flash查看工具吗?有的,市场上流行的动画浏览器不少,有一款国外的产品SwfBrowser就很不错。怎么说呢,利用ShockwaveFlash控件,通过VB就完全可以做出一个象模象样的Flash动画浏览器来。作为Flash的缔造者,Macromedia也提供了界面 ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-25 11:39:15.0,共阅读2805次,回复0次 |
|
|
 |
白乔原创:实战软件DIY[2]
|
|
| |
| 1. 实战目标
我们到底要做什么?“一副图画胜过千言万语”,图1为FlashNow!的最终用户安装界面(在本文的后续内容我们将学习到软件安装程序的制作)。
图1 FlashNow!动画浏览器安装界面
再也简单不过了,我们要做的是一个Flash动画浏览器。图2和图3是软件运行界面的2个不同风格的快照(snapshot),图2是FlashNow!的查看视图,图3是FlashNow!的浏览视图,一个类似于资源浏览器的界面。
图2 FlashNow!的查看视图
图3 FlashNow!的浏览视图
程序跑起来会有2个界面,实战目标应该清楚了,FlashNow!实际上就是一个类似于acdsee双界面的Flash动画浏览器。
“麻雀虽小,五脏俱全”,再简单的软件都必须有详尽的帮助文档。如图4为FlashNow!的帮助界面。看来我们的实战内容还应包括帮助文档的编写。
图4 FlashNow!的帮助界面
看来要学的东西还真的不少,那我们赶快开动吧!
|
|
| 作者:不祥 bluejoe张贴于2004-04-25 11:38:07.0,共阅读2921次,回复0次 |
|
|
 |
GetLastError()对应的原因
|
|
| |
| void DisplayError(DWORD dwError)
{
LPVOID pv;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwError,
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&pv,
0,
NULL);
MessageBox(NULL, (LPTSTR)pv, "Error", MB_ICONHAND);
LocalFree(pv);
}
这样用:
DisplayError(WSAGetLastError());
可以看到错误的原因!
|
|
| 作者:不祥 jerry张贴于2004-04-24 22:31:46.0,共阅读2358次,回复0次 |
|
|
 |
偶新来的,这是偶的处女贴,请大家多关照!
|
|
| |
| 呵呵!
|
|
| 作者:不祥 hustxiaoyao张贴于2004-04-24 11:21:26.0,共阅读1068次,回复0次 |
|
|
 |
snoopy每日一译-求星期几
|
|
| |
| 注意事项:
在现在广泛使用的阳历中,公元1年(AD 1)之前是公元前1年(1 BC),不存在公元0年。和阳历不同,天文历法(astronomical reckoning)有0年。为了区别起见,天文历法不使用AD和BC,而使用正负号代替。天文年+1对应于公元1年(AD 1),而天文年0对应于公元前1年(1 BC),天文年-1对应于公元前2年(2 BC)。为了方便起见,我在本文及程序中都使用天文历法。
预览:
算法是基于这样的事实:+1年1月1日是星期一,+2年1月1日是星期二,依此类推。这是因为365%7=1!有了这个知识,我写了这个程序。我会解释我怎样得到这个结果的,希望对别人有点帮助。
How and Why
在我写这个程序之前,我注意到没有什么类和控件告诉我+1年1月1日是星期几,因此我想没有简单的传统方法去知道一个随机的日期是星期几。我必须另劈捷径,或者,至少改进旧的。
计算星期几传统的方法是基于一个已知星期数的基准日期。因为基准日期可以随机选择,我选择一个特殊的日期以使事情简单化。1月1日似乎是最好的选择,这样的话我不用考虑从基准日期到该年末有多少天。现在,我该选择哪一年呢?我选择0年。假设我们想知道YYYY年MM月DD日是星期几。如果我们知道了YYYY年1月1日是星期几的话,答案就很容易了。计算YYYY年1月1日的公式:
theDayOfJan_1( ...
|
|
| 作者:不祥 ycr40张贴于2004-04-24 08:05:48.0,共阅读2198次,回复0次 |
|
|
 |
VCer.net宣传辞……
|
|
| |
| 发信人: fooo99 (liaomin), 信区: VisualC
标 题: http://vcer.net即日开通!
发信站: BBS 水木清华站 (Tue Apr 13 22:14:20 2004), 转信
///////////////////////////////////////////////////////////////
From bluejoe:
经过1年的准备,vcer.net已经开发完成并已开通
主要偏重于VC代码这块,包括:
代码片段:张贴源代码区;
代码组件:可复用的开发包、类;
代码工程:完整的VC工程;
代码教程:相关VC教程,VC FAQs全集;
代码工具:VC开发过程中的辅助工具、资源;
VCer论坛:论坛;
欢迎大家使用,并多提意见!!
感谢大家的一贯支持!!
在此特向一年前对vcer.net寄予厚望的VCer们致礼!!
////////////////////////////////////////////////////////
|
|
| 作者:不祥 bluejoe张贴于2004-04-23 09:32:50.0,共阅读1900次,回复0次 |
|
|
 |
如果我在编程方面遇到问题应该到哪个版发帖子呢?
|
|
| |
| 急!
谢谢!
|
|
| 作者:不祥 lpngy张贴于2004-04-21 19:31:13.0,共阅读1741次,回复4次 |
|
|
 |
使用QueryPerformanceCount的小例子
|
|
| |
| LARGE_INTEGER liCount1;
LARGE_INTEGER liCount2;
LARGE_INTEGER liFrequency;
double fSeconds;
//你的其他代码...
//时间点1(例如按某个button的时间)
QueryPerformanceCounter(&liCount1);
//你的其他代码...
//时间点2(例如某事件完成的时间)
QueryPerformanceCounter(&liCount2);
QueryPerformanceFrequency(&liFrequency);//每秒记数
fSeconds=(double)(liCount2.QuadPart -liCount1.QuadPart )/(double)liFrequency.QuadPart; //时间点2和时间点1之间的精确秒数
|
|
| 作者:不祥 ycr40张贴于2004-04-20 17:21:50.0,共阅读2297次,回复1次 |
|
|
 |
白乔原创:Shell基础类CShell
|
|
| |
| 本类封装了一些常用的Shell操作,包括:创建快捷方式,获取特殊目录路径(如:我的电脑)、枚举制定目录(如:桌面)的子项列表等。头文件:
// Shell.h: interface for the CShell class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SHELL_H__6D15D05C_CD8B_4422_BFAF_D0A70F36E352__INCLUDED_)
#define AFX_SHELL_H__6D15D05C_CD8B_4422_BFAF_D0A70F36E352__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CShell //Shell文件基础类
{
public:
BOOL FreeMemory(void * pBuffer);
BOOL CreateLink(LPCITEMIDLIST lpi, CString sPathLink, CString sDescription = "", BOOL bByName = false);
LPITEMIDLIST ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-20 20:52:12.0,共阅读2548次,回复0次 |
|
|
 |
偶新来的啊!大家多关照!
|
|
| |
| VC新手的说,向所有人致敬!
|
|
| 作者:不祥 aWu张贴于2004-04-20 14:46:05.0,共阅读1171次,回复2次 |
|
|
 |
轻轻松松将你的程序加上TrayIcon
|
|
| |
![工程快照[8,024字节]](/upload/2004/04/1047343490812.gif)
|
| |
| 使用CTrayIconDialog开发包可以在最短时间内将你的对话框程序加上通知栏图标及菜单。
CTrayIconDialog包主要包含2个类:CTrayIconDialog和CTrayIcon。前者完成对话框对TrayIcon的支持,后者则专门实现对TrayIcon的封装。使用CTrayIconDialog包的步骤非常简单。
首要条件是你的应用必须是一个基于对话框的应用,或者你需要加上TrayIcon的窗口必须是个对话框。接下来你需要将CTrayIconDialog设置成你的对话框的基类,也就是说,你必须将CDialog替换成CTrayIconDialog。
记住,与你的对话框相关的所有的CDialog都要换成CTrayIconDialog。包括BEGIN_MESSAGE_MAP里面,还有一些函数里对基类CDialog函数的调用,等等。
替换完毕,你的程序运行时就会出现TrayIcon,如图所示:
默认的图标是空的,提示文字告诉你:请使用GetTrayIcon()->Modify来设置你的图标。你可以照办,示例程序里面在CTrayIconDlgDemoDlg::OnInitDialog()里面就增添了以下语句:
//装载图标
m_hMyIcon = AfxGetApp()->LoadIcon(IDI_ICON1);
//设定提示文字
GetTrayIcon( ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-18 16:17:41.0,共阅读2804次,回复1次 |
|
|
 |
如何在对话框中加入状态栏[1]
|
|
| |
| 1.ID_INDICATOR_NISH and ID_INDICATOR_TIME这个两个加到 symbol 里去,同样的加到 string table 里去
2.在你的 Dialog 类里面加个 CStatusBar m_bar;
3.在实现文件开头加上
static UINT BASED_CODE indicators[] =
{
ID_INDICATOR_NISH,
ID_INDICATOR_TIME
};
4.OnInitDialog 里面加上
m_bar.Create(this); //We create the status bar
m_bar.SetIndicators(indicators,2); //Set the number of panes
CRect rect;
GetClientRect(&rect);
//Size the two panes
m_bar.SetPaneInfo(0,ID_INDICATOR_NISH,
SBPS_NORMAL,rect.Width()-100);
m_bar.SetPaneInfo(1,ID_INDICATOR_TIME,SBPS_STRETCH ,0);
//This is where we actually draw ...
|
|
| 作者:不祥 Bccv张贴于2004-04-20 11:46:50.0,共阅读2258次,回复0次 |
|
|
 |
异步读写的简单串口类
|
|
| |
| // Serial.h
#ifndef __SERIAL_H__
#define __SERIAL_H__
#define FC_DTRDSR 0x01
#define FC_RTSCTS 0x02
#define FC_XONXOFF 0x04
#define ASCII_BEL 0x07
#define ASCII_BS 0x08
#define ASCII_LF 0x0A
#define ASCII_CR 0x0D
#define ASCII_XON 0x11
#define ASCII_XOFF 0x13
class CSerial
{
public:
CSerial();
~CSerial();
BOOL Open( int nPort = 2, int nBaud = 9600 );
BOOL Close( void );
int ReadData( void *, int );
int SendData( const char *, int );
int ReadDataWaiting( void );
BOOL IsOpened( void ){ return( m_b ...
|
|
| 作者:不祥 bruticus张贴于2004-04-19 12:51:38.0,共阅读2863次,回复1次 |
|
|
 |
修正GridCtrl Demo2.25中New Cell-DateTime Cell设定时间在1970年1月1日之前出错的Bug
|
|
| |
![工程快照[59,506字节]](/upload/2004/04/1047343490822.jpg)
|
| |
| 当把DateTime cell的时间调到1970年1月1日前的时候,就会发生错误.因为其中使用的是CTime.我将CTime 改成COleDateTime,就解决了这个Bug.请参照Demo225有问题请mailto:ycr40@163.net
|
|
| 作者:不祥 ycr40张贴于2004-04-20 08:25:56.0,共阅读2120次,回复0次 |
|
|
 |
用默认浏览器打开 URL
|
|
| |
| HKEY hkRoot,hSubKey; //定义注册表根关键字及子关键字
char ValueName[256];
unsigned char DataValue[256];
unsigned long cbValueName=256;
unsigned long cbDataValue=256;
char ShellChar[256]; //定义命令行
DWORD dwType;
//打开注册表根关键字
if(RegOpenKey(HKEY_CLASSES_ROOT,NULL,&hkRoot)==ERROR_SUCCESS)
{
//打开子关键字
if(RegOpenKeyEx(hkRoot,
"htmlfile\\shell\\open\\command",
0,
KEY_ALL_ACCESS,
&hSubKey)==ERROR_SUCCESS)
{
//读取注册表,获取默认浏览器的命令行
RegEnumValue(hSubKey,
0,
ValueName,
&cbValueName,
NULL,
&dwType,
DataValue,
&cb ...
|
|
| 作者:不祥 Bccv张贴于2004-03-30 16:44:19.0,共阅读2683次,回复1次 |
|
|
 |
白乔原创:VC之控件篇
|
|
| |
| 本文主要通过大量示例指引读者了解和使用Windows控件以及ActiveX控件。1 前言
1.1 控件之于VC
控件与Visual C++没有直接的关系,控件是Windows操作系统的界面元素,而VC只是一种开发语言。VC可以编写Windows程序,当然也可以编写Windows界面,包括最熟悉的对话框界面。
对话框界面是初学者学习VC的一道门槛,学习复杂的文档/视对于初学者来说是很痛苦的事情。而对话框的优点就在于它的“所见即所得”,设计界面画得有多好看,程序运行界面就有多好看。而如何让你的对话框的界面更丰富一点,那就是控件的事情了。
所以,你,责无旁贷的,要先学好控件的使用;而本次教程,正是指引你如何在VC里实现控件编程。
控件是窗口,是个完成特定功能的小窗口。例如:最熟悉的列表框控件可以让你用来列出你所有女友的名字;
控件放置在对话框里,对话框就成为控件的容器,或曰父窗口;而控件就成为对话框的元素,或曰子窗口。
控件并不总是显示成一个窗口,它可以是隐藏着的,例如:你可以使用定时器控件来控制“神五”的发射,但没必要一定要在发射系统的主界面上土土地画上一只小闹钟。
你用来选择女友名字的列表框是Windows系统标准控件,用来指示大爆竹升天的定时器也是。但Windows系统为你考虑的总会有限,那么就需要一些先行的人(第三方)为你准备一些他们出品的控件,这些符合Windo ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-15 22:59:04.0,共阅读7900次,回复1次 |
|
|
 |
如果您的工具包过大,这样做
|
|
| |
| 给出那个包的地址,或者放到某个服务器,把 URL 在这里说下..就好了.
|
|
| 作者:不祥 Bccv张贴于2004-04-19 16:44:07.0,共阅读1629次,回复4次 |
|
|
 |
差别
|
|
| |
| http://www.taosl.net/news/news2003pic.htm
|
|
| 作者:不祥 xler张贴于2004-04-19 14:35:31.0,共阅读1579次,回复0次 |
|
|
 |
Visual Assist.net
|
|
| |
| Visual Assist.net,可以使用在vs.net 2003版上。
|
|
| 作者:不祥 brucewww张贴于2004-04-19 13:31:36.0,共阅读2499次,回复0次 |
|
|