1/1页1 跳转到查看:1057
发新话题 回复该主题

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

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

Windows SDK笔记(六):使用对话框资源建立窗口
  关键字: Fibonacci InfoQueue SYGUI 模板元编程 单件模式 DB2 
  Ⅰ.使用对话框资源建立主窗口
  一、概述
  在Charles Petzold的书中,介绍了一种直接利用对话框资源建立主窗口的方法。

  使用这种方法,可以方便的在主窗口中安排子控件,而代码的其他部分跟用普通窗口时一样。

  我们知道,对话框是系统预先定义的“窗口类”,它有自己的窗口处理函数,我们自己写的对话框消息处理函数并不是真正的窗口消息处理函数。

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

  二、书写一个“真正的”窗口消息处理函数

  按照普通窗口的方式书写好消息处理函数。

  (不要漏掉了DefWindowProc)

  三、注册窗口类

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

  四、建立对话框资源,指定窗口类为自定的窗口类。

  手工书写一个对话框资源,存为单独文件,然后包含到资源文件中去。

  (使用菜单View->Resource Includes弹出对话框,将文件名填入到Compile-time derective一栏,这将在rc文件中添加一行:"#include ""Some.dlg"" ")

  例:

  建立文件Some.dlg

  书写:

HexCalc DIALOG -1, -1, 102, 122
STYLE WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
CLASS "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。

TOP

 

支持楼主中...

TOP

 

TOP

 

TOP

 
1/1页1 跳转到
发表新主题 回复该主题