当前位置: 首页 > 图文教程 > 开发语言 > VC++ > Windows SDK笔记(六):使用对话框资源建立窗口

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 Windows SDK笔记(六):使用对话框资源建立窗口


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 349 ::
收藏到网摘: n/a

Windows SDK笔记(六):使用对话框资源建立窗口
作者:冯明德

Ⅰ.使用对话框资源建立主窗口

一、概述
在Charles Petzold的书中,介绍了一种直接利用对话框资源建立主窗口的方法。
使用这种方法,可以方便的在主窗口中安排子控件,而代码的其他部分跟用普通窗口时一样。

我们知道,对话框是系统预先定义的“窗口类”,它有自己的窗口处理函数,我们自己写的对话框消息处理函数并不是真正的窗口消息处理函数。
但我们可以在对话框模板脚本中,指定这个对话框使用我们自己定义的窗口类,而不是系统的对话框类,这样,就将对话框的消息处理函数“嫁接”成我们自己定义的消息处理函数了。

二、书写一个“真正的”窗口消息处理函数
按照普通窗口的方式书写好消息处理函数。
(不要漏掉了DefWindowProc)

三、注册窗口类
用书写的消息处理函数注册一个窗口类。

四、建立对话框资源,指定窗口类为自定的窗口类。
手工书写一个对话框资源,存为单独文件,然后包含到资源文件中去。
(使用菜单View->Resource Includes弹出对话框,将文件名填入到Compile-time derective一栏,这将在rc文件中添加一行:"#include ""Some.dlg"" ")
例:
建立文件Some.dlg
书写:

HexCalc DIALOG -1, -1, 102, 122STYLE WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOXCLASS "HexCalc" //填写上自己注册的类名称CAPTION "Hex Calculator"{	PUSHBUTTON "D", 68, 8, 24, 14, 14	PUSHBUTTON "A", 65, 8, 40, 14, 14	//各种控件}
五、使用非模式对话框方式建立主窗口
建立主窗口的时候,使用CreateDialog。
 hwnd = CreateDialog (	hInstance,	szAppName,	//对话框模板	0,	NULL) ; ShowWindow (hwnd, iCmdShow) ;

其他各部分,都与普通窗口时相同(注册窗口类、消息循环等)。

Ⅱ.在对话框中建立自定义子窗口

可以自己定义控件,然后在对话框模板中使用

一、定义"窗口类"与消息处理函数
在WinMain中
除了注册主窗口类外,
另外注册用于对话框的类,指明类对应的消息处理函数

wndclass.style = CS_HREDRAW | CS_VREDRAW ;wndclass.lpfnWndProc = SomeWndProc ; //对应的消息处理函数wndclass.cbClsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ;wndclass.hIcon = NULL ;wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;wndclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1) ;wndclass.lpszMenuName = NULL ;wndclass.lpszClassName = TEXT ("SomeControl") ;RegisterClass (&wndclass) ;

同时,还要书写好消息处理函数SomeWndProc。

二、在对话框模板中添加自定义控件窗口
在对话框模板上放上"Custom Control",然后设置属性,并填写自己定义的类名称SomeControl。