zoukankan      html  css  js  c++  java
  • Windows SDK笔记(六):使用对话框资源建立窗口

    一、概述
    在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。

  • 相关阅读:
    JQuery MultiSelect(左右选择框)
    jquery隐藏table表格的某一列
    JS刷新页面的几种方法
    jQuery对select操作小结
    更新数据前jquery如何填充数据到表单域中
    hibernate中load和get方法的区别
    java项目常用 BaseDao BaseService
    js判断360浏览器 兼容模式IE版本
    vue 文本比较插件
    vue问题总结
  • 原文地址:https://www.cnblogs.com/draeag/p/910751.html
Copyright © 2011-2022 走看看