Windows核心编程学习一:使用DialogBoxParam显示模式对话框
注:源码为学习《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显示模式对话框相关推荐
- 窗口消息——Windows核心编程学习手札之二十六
窗口消息 --Windows核心编程学习手札之二十六 Windows允许一个进程至多建立10000个不同类型的用户对象(user object):图符.光标.窗口类.菜单.加速键表等,当一个线程调用一 ...
- 未处理异常和C++异常——Windows核心编程学习手札之二十五
未处理异常和C++异常 --Windows核心编程学习手札之二十五 当一个异常过滤器返回EXCEPTION_CONTINUE_SEARCH标识符时是告诉系统继续上溯调用树,寻找另外的异常过滤器,但当每 ...
- 异常处理程序和软件异常——Windows核心编程学习手札之二十四
异常处理程序和软件异常 --Windows核心编程学习手札之二十四 CPU负责捕捉无效内存访问和用0除一个数值这种错误,并相应引发一个异常作为对错误的反应,CPU引发的异常称为硬件异常(hardwar ...
- 结束处理程序——Windows核心编程学习手札之二十三
结束处理程序 --Windows核心编程学习手札之二十三 使用SEH可以只关注程序要完成任务,而运行中发生的错误,系统将会发现并通知.Windows引入SHE是为了便于操作系统的开发,使用SHE所造成 ...
- 插入DLL和挂接API——Windows核心编程学习手札之二十二
插入DLL和挂接API --Windows核心编程学习手札之二十二 如下情况,可能要打破进程的界限,访问另一个进程的地址空间: 1)为另一个进程创建的窗口建立子类时: 2)需要调试帮助时,如需要确定另 ...
- 线程本地存储器——Windows核心编程学习手札之二十一
线程本地存储器 --Windows核心编程学习手札之二十一 C/C++运行期库使用线程本地存储器,运行期库是在多线程应用程序出现前设计的,因此运行期库里的大多数函数是用于单线程应用程序的.函数strt ...
- DLL的高级操作技术——Windows核心编程学习手札之二十
DLL的高级操作技术 --Windows核心编程学习手札之二十 显示加载DLL模块: HINSTANCE LoadLibrary(PCTSTR pszDLLPathName); HINSTANCE L ...
- DLL基础——Windows核心编程学习手札之十九
DLL基础 --Windows核心编程学习手札之十九 Windows API中的所有函数都包含在DLL中,3个最重要的DLL是Kernel32.dll,它包含用于管理内存.进程和线程的各个函数:Use ...
- 堆栈——Windows核心编程学习手札之十八
堆栈 --Windows核心编程学习手札之十八 堆栈可以用来分配许多较小的数据块,可以不考虑分配粒度和页面边界之类的问题,但分配和释放内存块的速度比其他机制要慢,并且无法直接控制物理存储器的提交和回收 ...
- 内存映射文件——Windows核心编程学习手札之十七
内存映射文件 --Windows核心编程学习手札之十七 与虚拟内存一样,内存映射文件保留地址空间,并将物理存储器提交给该区域,差别在于所提交的物理存储器是磁盘上有文件存在的空间,而非系统的页文件,一旦 ...
最新文章
- 判断男人成熟度16个新标准。
- smote算法_支持向量机算法的可解释和可视化
- 漫步线性代数十一—— 四个基本子空间
- 干货 一文看尽 mysql
- 深入浅出,解读阿里云云盾WAF防护功能
- OA性能调优方案(一)
- Linux dns劫持程序,linux的dns被劫持(解决方案)
- 导致Android手机崩溃的壁纸,三星正在研究修复壁纸导致手机崩溃的怪异 Android bug...
- PHP下制作图灵机器人程序
- Oracle 10G RAC ASM - 控制文件多路存储
- 【pureftp】解决filezilla连接ftp报错 服务器发回了不可路由的地址 使用服务器地址代替
- 两种方法快速打开Chrome浏览器
- 个人对专注力的一点看法
- 我对SNS游戏的初步理解
- 基于单片机的PM2.5(灰尘)检测系统
- Deep Domain Confusion: Maximizing for Domain Invariance
- 人工智能+游戏 会带来什么
- C++结构体和类的成员函数
- Sonarqube 通过docker-compose启动报错,提示virtual memory areas vm.max_map_count [65530] is too low
- 充电桩与后台服务器通迅协议,充电桩平台通讯协议.doc
热门文章
- Linux线程的终止
- JavaWeb开发框架——Spring
- Windows安装Jenkins msi文件时,用户无法授权通过验证解决方法
- Android Ble蓝牙中如何获取RawData ,UUID,Major,Minor,Measured power at 1 meter的数据。
- 第三章 平稳时间序列模型
- html 简单动画效果,HTML-简单动画
- Python3使用xpath爬取豆丁网文档
- 2019上半年软考试题(转)
- x2分布临界值表(卡方分布)
- java求阶乘1-20_java求1+2!+3!+...+20!的和,java1到20的阶乘