注:源码为学习《Windows核心编程》的一些尝试,非原创。若能有助于一二访客,幸甚。

1.DialogBoxParam

This function creates a modal dialog box from a dialog box template resource. Before displaying the dialog box, the function passes an application-defined value to the dialog box procedure as thelParam parameter of the WM_INITDIALOG message. An application can use this value to initialize dialog box controls.

int DialogBoxParam( HINSTANCE hInstance, LPCTSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, PARAM dwInitParam
); 

2.最简单的尝试

/******************************************************************************** File: FirstTry.cpp* Author:   guzhoudiaoke@126.com* Time:    2013-04-14* 描述:  主要尝试使用DialogBoxParam函数显式一个对话框*******************************************************************************/#include <Windows.h>
#include <Windowsx.h>
#include <tchar.h>
#include "Resource.h"// 对话框过程函数
INT_PTR WINAPI Dlg_Proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{return FALSE;
}int WINAPI _tWinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int)
{DialogBoxParam(hinstExe, MAKEINTRESOURCE(IDD_FIRSTTRY), NULL, Dlg_Proc, _ttoi(pszCmdLine));return 0;
}

运行结果:

但会发现,对话框不能被关闭。

3.对话框过程函数

/******************************************************************************** File: FirstTry.cpp* Author:   guzhoudiaoke@126.com* Time:    2013-04-14* 描述:  主要尝试使用DialogBoxParam函数显式一个对话框*******************************************************************************/#include <Windows.h>
#include <Windowsx.h>
#include <tchar.h>
#include "Resource.h"/* SetDlgMsgResult This macro maps to the SetWindowLong function.* SetWindowLong changes an attribute of the specified window, also sets a 32-bit (LONG) * value at the specified offset into the extra window memory of a window.* The normal HANDLE_MSG macro in WindowsX.h does not work properly for dialog* boxes because DlgProc returns a BOOL instead of an LRESULT (likeWndProcs). * This chHANDLE_DLGMSG macro corrects the problem.*/
#define chHANDLE_DLGMSG(hWnd, message, fn)                 \case (message): return (SetDlgMsgResult(hWnd, uMsg,     \HANDLE_##message((hWnd), (wParam), (lParam), (fn))))void Dlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{switch (id) {case IDCANCEL:EndDialog(hwnd, id);break;}
}// 对话框过程函数
INT_PTR WINAPI Dlg_Proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{switch (uMsg) {chHANDLE_DLGMSG(hwnd, WM_COMMAND,    Dlg_OnCommand);}return FALSE;
}int WINAPI _tWinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int)
{DialogBoxParam(hinstExe, MAKEINTRESOURCE(IDD_FIRSTTRY), NULL, Dlg_Proc, _ttoi(pszCmdLine));return 0;
}

其中chHANDLE_DLGMSG是原书作者对HANDLE_MSG的改进。

Windows核心编程学习一:使用DialogBoxParam显示模式对话框相关推荐

  1. 窗口消息——Windows核心编程学习手札之二十六

    窗口消息 --Windows核心编程学习手札之二十六 Windows允许一个进程至多建立10000个不同类型的用户对象(user object):图符.光标.窗口类.菜单.加速键表等,当一个线程调用一 ...

  2. 未处理异常和C++异常——Windows核心编程学习手札之二十五

    未处理异常和C++异常 --Windows核心编程学习手札之二十五 当一个异常过滤器返回EXCEPTION_CONTINUE_SEARCH标识符时是告诉系统继续上溯调用树,寻找另外的异常过滤器,但当每 ...

  3. 异常处理程序和软件异常——Windows核心编程学习手札之二十四

    异常处理程序和软件异常 --Windows核心编程学习手札之二十四 CPU负责捕捉无效内存访问和用0除一个数值这种错误,并相应引发一个异常作为对错误的反应,CPU引发的异常称为硬件异常(hardwar ...

  4. 结束处理程序——Windows核心编程学习手札之二十三

    结束处理程序 --Windows核心编程学习手札之二十三 使用SEH可以只关注程序要完成任务,而运行中发生的错误,系统将会发现并通知.Windows引入SHE是为了便于操作系统的开发,使用SHE所造成 ...

  5. 插入DLL和挂接API——Windows核心编程学习手札之二十二

    插入DLL和挂接API --Windows核心编程学习手札之二十二 如下情况,可能要打破进程的界限,访问另一个进程的地址空间: 1)为另一个进程创建的窗口建立子类时: 2)需要调试帮助时,如需要确定另 ...

  6. 线程本地存储器——Windows核心编程学习手札之二十一

    线程本地存储器 --Windows核心编程学习手札之二十一 C/C++运行期库使用线程本地存储器,运行期库是在多线程应用程序出现前设计的,因此运行期库里的大多数函数是用于单线程应用程序的.函数strt ...

  7. DLL的高级操作技术——Windows核心编程学习手札之二十

    DLL的高级操作技术 --Windows核心编程学习手札之二十 显示加载DLL模块: HINSTANCE LoadLibrary(PCTSTR pszDLLPathName); HINSTANCE L ...

  8. DLL基础——Windows核心编程学习手札之十九

    DLL基础 --Windows核心编程学习手札之十九 Windows API中的所有函数都包含在DLL中,3个最重要的DLL是Kernel32.dll,它包含用于管理内存.进程和线程的各个函数:Use ...

  9. 堆栈——Windows核心编程学习手札之十八

    堆栈 --Windows核心编程学习手札之十八 堆栈可以用来分配许多较小的数据块,可以不考虑分配粒度和页面边界之类的问题,但分配和释放内存块的速度比其他机制要慢,并且无法直接控制物理存储器的提交和回收 ...

  10. 内存映射文件——Windows核心编程学习手札之十七

    内存映射文件 --Windows核心编程学习手札之十七 与虚拟内存一样,内存映射文件保留地址空间,并将物理存储器提交给该区域,差别在于所提交的物理存储器是磁盘上有文件存在的空间,而非系统的页文件,一旦 ...

最新文章

  1. 判断男人成熟度16个新标准。
  2. smote算法_支持向量机算法的可解释和可视化
  3. 漫步线性代数十一—— 四个基本子空间
  4. 干货 一文看尽 mysql
  5. 深入浅出,解读阿里云云盾WAF防护功能
  6. OA性能调优方案(一)
  7. Linux dns劫持程序,linux的dns被劫持(解决方案)
  8. 导致Android手机崩溃的壁纸,三星正在研究修复壁纸导致手机崩溃的怪异 Android bug...
  9. PHP下制作图灵机器人程序
  10. Oracle 10G RAC ASM - 控制文件多路存储
  11. 【pureftp】解决filezilla连接ftp报错 服务器发回了不可路由的地址 使用服务器地址代替
  12. 两种方法快速打开Chrome浏览器
  13. 个人对专注力的一点看法
  14. 我对SNS游戏的初步理解
  15. 基于单片机的PM2.5(灰尘)检测系统
  16. Deep Domain Confusion: Maximizing for Domain Invariance
  17. 人工智能+游戏 会带来什么
  18. C++结构体和类的成员函数
  19. Sonarqube 通过docker-compose启动报错,提示virtual memory areas vm.max_map_count [65530] is too low
  20. 充电桩与后台服务器通迅协议,充电桩平台通讯协议.doc

热门文章

  1. Linux线程的终止
  2. JavaWeb开发框架——Spring
  3. Windows安装Jenkins msi文件时,用户无法授权通过验证解决方法
  4. Android Ble蓝牙中如何获取RawData ,UUID,Major,Minor,Measured power at 1 meter的数据。
  5. 第三章 平稳时间序列模型
  6. html 简单动画效果,HTML-简单动画
  7. Python3使用xpath爬取豆丁网文档
  8. 2019上半年软考试题(转)
  9. x2分布临界值表(卡方分布)
  10. java求阶乘1-20_java求1+2!+3!+...+20!的和,java1到20的阶乘