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

VC++
如何有效地使用对话框
一个定制CFileDialog对话框的实例
XP风格复活节彩蛋的实现
程序界面多模式显示的实现
改变视图单调的背景
使窗体拥有透明效果的API
《电子尺》V1.02程序开发实例
美化你的应用程序的外观界面
个人考勤软件开发实例
使用VC6.0实现窗口的任意分割
如何让一个打开的文档成为活动文档
创建非矩形窗口的简单方法
轻松实现类VC界面
视图的缩放的完整论述
如何获得另一个应用程序窗口中的文本
如何发送命令到文档对象
动画窗口的实现-VC++实例一则
如何在其他程序的窗口上创建按钮并使之能响应
如何在基于对话框的程序中动态设置鼠标指针
扩展COleDropTarget类来支持任意窗口拖放 - 作者:王加宝

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 350 ::
收藏到网摘: 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。