在一次项目中,需要做一个公共的DLL模块,该DLL需要有弹出窗体,以此做一记录,备忘!
首先用vs2008新建一个Win32 DLL工程
在vs2008中选中并右击该工程名,选择添加一个Dialog资源
在需要弹出窗口的位置插入如下代码:
ret = DialogBoxParamW(g_dllmodule, MAKEINTRESOURCEW(IDD_DIALOG1), parent_hwnd, callback_dlgproc, (LPARAM)si);
参数g_dllmodule必须从DllMain中传递过来,不然无法显示窗体和处理窗体消息
参数IDD_DIALOG1为添加的Dialog资源ID名称
参数parent_hwnd为窗体的父窗体句柄,也可以为NULL
参数callback_dlgproc为窗体的消息循环处理的回调函数
参数si为自定义的数据类型,可通过该参数传递数据给WM_INITDIALOG消息,近在WM_INITDIALOG消息中该参数有效
项目中需要修改STATIC控件的字体颜色,经过搜索查找到类似解决方案并修改应用的项目中:
case WM_CTLCOLORSTATIC:
{
if(IDC_STATIC_NOTE == GetDlgCtrlID((HWND)lp))
{
HDC dc = (HDC)wp;
SetTextColor(dc, RGB(255, 0, 0));
SetBkMode(dc, TRANSPARENT);
return (INT_PTR)GetStockObject(NULL_BRUSH);
}
}
在消息循环处理回调函数中,增加消息类型WM_CTLCOLOTSTATIC,实现修改STATIC控件的字体颜色,通过GetDlgCtrlID来获取需要修改的STATIC控件,参数lp为消息循环回调函数中的最后一个参数LPARAM lp,该参数此处存储的是STATIC控件的ID;
可对该消息进行扩展,如修改控件的字体样式、大小、控件背景色等;