Windows编程之非模态对话框
1 创建非模态对话框
<1> HWNDCreateDialog( HINSTANCE hInstance, // handle to module
LPCTSTRlpTemplate, // dialog box template name
HWNDhWndParent, // handle to owner window
DLGPROClpDialogFunc // dialog box procedure);
<2> HWND CreateDialogIndirect( HINSTANCE hInstance, // handle to module
LPCDLGTEMPLATE lpTemplate, //dialog box template
HWND hWndParent, // handle to owner window
DLGPROC lpDialogFunc //dialog box procedure);
<3> HWND CreateDialogIndirectParam( HINSTANCE hInstance, // handle to module
LPCDLGTEMPLATE lpTemplate, // dialog box template
HWND hWndParent, // handle to owner window
DLGPROC lpDialogFunc, // dialog box procedure
LPARAM lParamInit // initialization value);
<4> HWND CreateDialogParam( HINSTANCE hInstance, // handle to module
LPCTSTR lpTemplateName, //dialog box template
HWND hWndParent, // handle to owner window
DLGPROC lpDialogFunc, //dialog box procedure
LPARAM dwInitParam //initialization value);
參数跟非模态对话框一致。CreateDialogParam会调用CreateWindowExe去创建一个窗体,所以这种对话框事实上就是窗体。当然单独一个对话框能够没有父窗体直接单独存在。
2 含有父窗体的对话框程序
3 自己定义窗体类(无父窗体)的对话框程序
<1>在脚本中指定对话框的类型以及各种控件假定脚本名称为new.dlg
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGR1cGQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
<2>然后在rc文件里加入脚本
<3>在WinMain函数注冊窗体类
注意这里的CreateDialog的最后一个參数DLGPROC为NULL,由于在窗体类中指定了窗体过程函数。
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCEhPrevInstance,PSTR szCmdLine, intiCmdShow)
{
staticTCHAR szAppName[] = TEXT ("HexCalc");
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = DLGWINDOWEXTRA ; // note here
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName =szAppName ; if(!RegisterClass (&wndclass))
{
MessageBox ( NULL, TEXT ("Thisprogram requires Windows NT!"), szAppName, MB_ICONERROR) ;
return0 ;
} hwnd =CreateDialog(hInstance,szAppName,NULL,NULL); //note here ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ; while(GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
} returnmsg.wParam ;
}
生成的窗体程序程序如图所看到的:
12 从资源载入(无父窗体)的对话框程序
LRESULT CALLBACKWndProc(HWND,UINT,WPARAM,LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCEhPrevInstance,PSTR szCmdLine, intiCmdShow)
{
HWND hwnd ;
MSG msg ; //hwnd =CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)WndProc);
hwnd =CreateDialogParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)WndProc,NULL); ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ; while(GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
returnmsg.wParam ;
}
能够看到这里没有窗体的设计,窗体的注冊,由于这样的从资源载入的对话框的窗体类是已经定义的,就像那种PushButton一样。都是定义好的窗体的类,因而不须要注冊。
生成的单独对话框程序例如以下图所看到的:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGR1cGQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
以上程序的下载地址:下载
Windows编程之非模态对话框的更多相关文章
- MFC编程 | 非模态对话框的定义
因为课程需要,会用到MFC编程,所以讲一些经验总结下,以便日后使用查询. // 非模态对话框的定义 // 通过单文档菜单调用一个非模态窗口 1.首先在工程里插入一个对话框(如:IDD_DLG_TEST ...
- MFC模态和非模态对话框编程
MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box). 一.模态对话框(model dialog box) 在程 ...
- VS2010/MFC编程入门之十二(对话框:非模态对话框的创建及显示)
上一节鸡啄米讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 鸡啄米已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换.鸡啄米会将 ...
- MFC编程入门之十二(对话框:非模态对话框的创建及显示)
上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 非模态对话框显示后,程序其他窗口仍然能正常运行,可以响应用户输入,还可以相互切换.上一讲中创建的Tip模态对话框 ...
- Windows SDK 非模态对话框的消息处理
在SDK中使用非模态对话框时的几个问题: 1.为什么要调用IsDialogMessage?? 2.非模态对话框与主窗口有什么区别? 3.如果不调用IsDialogMessage,消息能不能传递到对话框 ...
- 模态对话框与非模态对话框(modeless)
对话框有两种创建方式:DoModal和Creat. 其中DoModal创建的是模态的对话框,而Creat创建的是非模态的对话框下面总结下他们的不同. 对于模态的对话框,在该对话框被关闭前,用户将不能在 ...
- MFC非模态对话框中屏蔽ESC键
个人的编程经验认为:对于非模态对话框,按下ESC键和点击红叉都会响应OnCancel()函数,而不会去响应OnClose()函数. 我们都知道,如果想屏蔽Enter键,只须重写OnOK()函数即可(重 ...
- VS2010/MFC对话框:非模态对话框的创建及显示
非模态对话框的创建及显示 上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切 ...
- MFC中模态对话框和非模态对话框的差别
在MFC中有模态对话框和非模态对话框,那这两种有什么差别呢. 又都是用于什么场合呢. 首先,要弄清楚2种对话框是怎样创建的. 然后要弄清楚2种对话框有什么差别,可能从表面上看,模态会堵塞主对话框.可原 ...
随机推荐
- iframe间的通信
父框架 <body></body> <script type="text/javascript"> document.domain = '100 ...
- KaOS 2016.04 发布,桌面 Linux 发行版
KaOS 2016.04 发布了,KaOS是一份桌面Linux发行,其特色在于最新版本的KDE桌面环境及其他流行的使用Qt工具包的软件程序.它最初基于Arch Linux,但从2013年四月起,开发者 ...
- TCanvas.CopyRect方法中参数CopyMode的意义
首先看可能取值: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cmBlackness = BLACKNESS; cmDstInvert = DSTINVERT; cmMer ...
- [置顶] js中如何复制一个对象,如何获取所有属性和属性对应的值
在js中如何复制一个对象,例如如下一个js对象. 如果知道这个对象的所有属性自然就可以重新new一个,然后对每个属性赋值,就可以做到,但如果不知道呢?如何创建一个内容相同 的对象呢? var obj= ...
- View实现涂鸦、撤销以及重做功能
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...
- 【Cocos2d-X游戏实战开发】捕鱼达人之开发前准备工作(一)
本系列学习教程使用的是cocos2d-x-2.1.4(最新版为cocos2d-x-2.1.5) 博主发现前两个系列的学习教程被严重抄袭,在这里呼吁大家请尊重开发者的劳动成果, 转载的时候请务必注明出处 ...
- 解决 Android SDK Manager不能下载旧版本的sdk的问题
解决无法使用Android SDK Manager下载SDK开发包的解决办法. 当我们在官网下载google的集成ADT,也就是adt-bundle-linux-x86.zip开发包,进行解压, 打 ...
- HTML5 实现拖拽
如图 可以从第一个方框拖拽花色到第二个方框中. 也可以再拖动回来. 具体代码实现 index.html <!DOCTYPE HTML> <html> <head> ...
- Delphi 10.1 柏林更新内容简译
新的 SDKTransform.exe 支持转换 Object-C 或 C++ 头文件到Delphi. 修改了对话框的接口,分成了同步和异步两种: http://blog.qdac.cc/?p=380 ...
- Android菜鸟的成长笔记(1)——Android开发环境搭建从入门到精通
原文:Android菜鸟的成长笔记(1)--Android开发环境搭建从入门到精通 今天在博客中看到好多Android的初学者对Android的开发环境的搭建不熟悉而导致不能进行学习,所以我决定自己写 ...