《深入浅出MFC第2版(PDF格式)》第24章


的处理例程即可。 
这种观念以及作法就是MFC 的Message Map 的雏形。MFC 把其中的动作包装得更好 
更精致(当然因此也就更复杂得多),成为一张庞大的消息地图;程序一旦获得消息, 
就可以按图上溯,直到被处理为止。我将在第3章简单仿真MFC 的Message Map ,并在 
第9章「消息映射与绕行」中详细探索其完整内容。 
对话框的运作 
Windows 的对话框依其与父窗口的关系,分为两类: 
modal
1。 「令其父窗口除能,直到对话框结束」,这种称为 对话框。 
modeless
2。 「父窗口与对话框共同运行」,这种称为 对话框。 
modal Generic ! §About ! ¨
比较常用的是 对话框。我就以 的 对话框做为说明范例。 
为了做出一个对话框,程序员必须准备两样东西: 
dialog template RC
1。 对话框模板( )。这是在 文件中定义的一个对话框外貌,以各 
。。。 
种方式决定对话框的大小、字形、内部有哪些控制组件、各在什么位置 等等。 
2。 对话框函数(dialog procedure )。其类型非常类似窗口函数,但是它通常只处 
WM_INITDIAL OG WM MAND
_ 
理 和 两个消息。对话框中的各个控制组件也 
都是小小窗口,各有自己的窗口函数,它们以消息与其管理者(父窗口,也就 
WM MAND 
_ 
是对话框)沟通。而所有的控制组件传来的消息都是 ,再由其 
参数分辨哪一种控制组件以及哪一种通告(notification )。 
22 
…………………………………………………………Page 85……………………………………………………………
Modal 对话框的激活与结束,靠的是DialogBox 和EndDialog 两个API 函数。请看 
图1…4。 
TR UE FALSE 
对话框处理过消息之后,应该传回 ;如果未处理消息,则应该传回 。这是 
FALSE 
因为你的对话框函数之上层还有一个系统提供的预设对话框函数。如果你传回 , 
该预设对话框函数就会接手处理。 
Dialog Templatet in RC file。 
对话框模板 ( ), 
AboutBox DIALOG DISCARDABLE 22; 17; 144; 75 
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU 
CAPTION 〃About Generic〃 
BEGIN 
CTEXT 〃Windows 95〃; …1;0; 5;144;8 
CTEXT 〃Generic Application〃;…1;0;14;144;8 
1 DialogBox 打开一个对话框: CTEXT 〃Version 1。0〃; …1;0;34;144;8 
DEFPUSHBUTTON 〃OK〃; IDOK;53;59;32;14;WS_GROUP 
END 
DialogBox(_hInst; 
〃AboutBox〃; // 对话框模板名称 
hWnd; // 父窗口 
(DLGPROC)About // 对话框函数名称 
); 
2 控制权转到对话框函数 
LRESULT CALLBACK About(HWND hDlg; UINT message; 
4 WPARAM wParam; LPARAM lParam) 
{ 
对 UNREFERENCED_ PARAMETER(lParam); // 避免編译时的警告 
话 
框 switch (message) { 
结 case WM_INITDIALOG: 
束 return (TRUE); // TRUE 表示我已处理过这个消息 
, 
case WM_MAND: 
回 if (LOWORD(wParam) == IDOK 对话框內部自有一个消息 
返 || LOWORD(wParam) == IDCANCEL) { 3 回路(由系統维护) 
EndDialog(hDlg; TRUE); 
return (TRUE); // TRUE 表示我已处理过这个消息 
} 当使用者按下 'OK' 钮,产生 
break; WM_MAND 命令消息, 
} 识别码为IDOK,于是流往 
return (FALSE); // FALSE 表示我没有处理这个消息 
} 
图 1…4 对话框的诞生、运作、结束 
23 
…………………………………………………………Page 86……………………………………………………………
模块定义文件 ( ) 
。DEF 
Windows 程序需要一个模块定义文件,将模块名称、程序节区和资料节区的内存特性、 
heap stack callback 。。。 
模块堆积( )大小、堆栈( )大小、所有 函数名称 等等登记下来。下 
面是个实例: 
NAME Generic 
DESCRIPTION "Generic Sample" 
EXETYPE WINDOWS 
STUB "WINSTUB。EXE" 
CODE PRELOAD DISCARDABLE 
DATA PRELOAD MOVEABLE MULTIPLE 
HEAPSIZE 4096 
STACKSIZE 10240 
EXPORTS 
MainWndProc @1 
AboutBox @2 
在Visual C++ 整合环境中开发程序,不再需?
小说推荐
返回首页返回目录