自绘实现MessageBox

okvictor_20082003 2008-05-13 11:31:32

需要大侠能帮帮忙,用VC实现类似MessageBox的窗口类,要求:
1)不使用DLGTEMPLATE结构(比如XMessageBox是不行的);
2) 标题栏颜色能自定义
3)内容区(除标题栏)的颜色能自定义
4)确定按钮的位置和颜色能自定义
5)模态的窗口,带图标
6)参数和MessageBox函数类似

急用呀!!!
...全文
680 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kudeet 2008-05-13
  • 打赏
  • 举报
回复
Hook WH_CBT then use SubclassWindow to change the appearance of window and button .
jameshooo 2008-05-13
  • 打赏
  • 举报
回复

LPWORD lpwAlign ( LPWORD lpIn)
{
DWORD_PTR ul = (DWORD_PTR) lpIn;
ul = (ul + 3) & ~3;
return (LPWORD) ul;
}
// default Dialog Style
DWORD GetDialogStyle()
{
return WS_POPUP | WS_BORDER | WS_SYSMENU | DS_MODALFRAME | WS_CAPTION | WS_MINIMIZEBOX;
}
LPCDLGTEMPLATE GetDialogTemplate(DWORD dwDlgStyle, LPCWSTR szCaption)
{
static BYTE pDlgTemplate[2048] = "";
static BOOL bValid = FALSE;
if (bValid)
return (LPCDLGTEMPLATE)pDlgTemplate;

LPDLGTEMPLATE lpdt;
LPWORD lpw;
LPWSTR lpwsz;
int nchar;

lpdt = (LPDLGTEMPLATE)pDlgTemplate;

// Define a dialog box.
lpdt->style = (dwDlgStyle & ~DS_SETFONT); // 这里设置窗口风格
lpdt->dwExtendedStyle = WS_EX_CONTROLPARENT; // 这里设置扩展窗口风格
lpdt->cdit = 0; // number of controls
lpdt->x = 0; lpdt->y = 0; // 这里设置窗口大小
lpdt->cx = 300; lpdt->cy = 300;

lpw = (LPWORD) (lpdt + 1);
*lpw++ = 0; // no menu
*lpw++ = 0; // predefined dialog box class (by default)
lpwsz = (LPWSTR) lpw;
lstrcpyW(lpwsz, szCaption);
nchar = lstrlenW(szCaption);
lpw += nchar;
lpw = lpwAlign (lpw); // align DLGITEMTEMPLATE on DWORD boundary

bValid = TRUE;
return (LPCDLGTEMPLATE)lpdt;
}

::DialogBoxIndirect(NULL, (LPCDLGTEMPLATE)GetDialogTemplate(GetDialogStyle(),L"dialog caption"), hWndParent, DialogProc);

okvictor_20082003 2008-05-13
  • 打赏
  • 举报
回复
能给点代码例子吗?
jameshooo 2008-05-13
  • 打赏
  • 举报
回复
用代码创建一个空的对话框模板,然后使用DialogBoxIndirect直接创建模式窗口。在模板中设置窗口风格,可以实现无标题栏和边框,在对话框过程中自绘客户区,模拟实现标题栏和边框,这样窗口的所有部分都能自定义。
代码创建空对话框模板的方法可以参考拙作CDHtmlDialogImpl,下载压缩包后里面只有一个头文件
cnzdgs 2008-05-13
  • 打赏
  • 举报
回复
自己注册一个类,创建窗口时不要边框,根据需要创建按钮,响应WM_PAINT消息贴背景图(包括标题和客户区背景),响应WM_NCHITTEST消息判断鼠标是否在标题栏上,响应按钮点击事件。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧