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

2016-01-29 11:56 120 1 收藏

Windows SDK笔记(六):使用对话框资源建立窗口,Windows SDK笔记(六):使用对话框资源建立窗口

【 tulaoshi.com - C语言心得技巧 】

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

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

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

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

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

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)
HexCalc DIALOG -1, -1, 102, 122STYLE WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOXCLASS "HexCalc"    //填写上自己注册的类名称CAPTION "Hex Calculator"{PUSHBUTTON "D",       68,  8,  24, 14, 14PUSHBUTTON "A",       65,  8,  40, 14, 14//各种控件}
五、使用非模式对话框方式建立主窗口
建立主窗口的时候,使用CreateDialog。
 hwnd = CreateDialog (     hInstance,     szAppName,//对话框模板     0,     NULL) ;     ShowWindow (hwnd, iCmdShow) ;

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

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

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)
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。

来源:http://www.tulaoshi.com/n/20160129/1483961.html

延伸阅读
问:程序是基于对话框的,我显示两个对话框,一个在另一个后面,下面是我的做法: CMyApp::InitInstance () { ... CMyDialog1 dlg1; m_hMainWnd = &dlg1; int result = dlg1.DoModal (); CMyDialog2 dlg2; result = dlg2.DoModal (); ... } 在上面的代码中,首先一个对话框得到了适当地调用...
VisualBasic提供了过时的FileCopy语句.问题是使用该函数时并不显示文件复制对话框,也就是说,当拷贝一个大文件时,用户看不到Windows的标准 文件复制对话框,无法从进度条上判断当前复制的进度.那么,如何做到这一点呢?请看下面: PublicTypeSHFILEOPSTRUCT hWndAsLong wFuncAsLong pFromAsString pToAsString fFl...
标签: 办公软件
在Excel中,执行“工具→选项”命令,打开“选项”对话框可进一步对Excel进行个性化设置。但是,如果设置不当,有时会带来不必要的麻烦。下面是笔者同一位Excel初学者的对话,我们整理出来,希望对大家有所帮助。 问:每次启动Excel时,窗口右侧都被一个工具条占去了一大部分(如图1),影响编辑表格,如何不让这个工具条自动启动呢? 答...
标签: 办公软件
    Excel 2000 新增的在对话框中输入区域引用可以折叠的按钮,这样用户在工作表上选定所需的区域时,对话框就不会阻挡视线。对这类对话框的操作是,在折叠按钮上单击可以将其折叠,再次单击则返回到对话框,图2-9和图2-10分别显示了折叠前后的效果。
Windows SDK笔记(七):创建MDI窗口 作者:冯明德 一、概述 MDI窗口包含一个框架窗口和若干子窗口。 实际上,框架窗口本身是一个普通主窗口,不过它的客户去被一个特殊窗口覆盖。 这个特殊窗口是系统预定义的“窗口类”,类名称为:"MDICLIENT"。它负责各个MDI子窗口的管理。 ...

经验教程

307

收藏

85
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部