在做gina的时候,遇到一个问题,因为要有对话框操作,在gina中的对话框是使用wlxDialogBoxParam创建出来的,在自己创建对话框的时候,无论怎样,弹出的对话框都不能始终在前面,原因如下,
使用DialogBoxParam创建对话框,要有回调函数,这个函数其实是createWindow的简化版。创建出来的对话框是非模式的。在这个回调函数中再调用messagebox出来的对话框默认也是非模式的,这是继承关系吧。要想使用模式的,加MB_TASKMODAL类型,
实验证明Afxmessagebox在什么地方调用,都是模式的,但这个函数没有设置标题的地方。
下面是模拟测试代码:
- INT_PTR CALLBACK DialogProc(HWND _hwnd, UINT msg, WPARAM wp, LPARAM lp)
- {
- switch (msg)
- {
- case WM_INITDIALOG: //初始化对话框
- {
- //初始化对话框
- break;
- }
- case WM_COMMAND: //命令
- {
- switch (LOWORD(wp)) //信息种类
- {
- case IDOK://ok按钮
- {
- wchar_t newpwd[100] = {0}, newpwdConfig[100] = {0};
- MessageBox(0, L"您的密码已更改。", L"更改密码", MB_ICONINFORMATION|MB_TASKMODAL);//MB_TASKMODAL[这个标志制定出来的对话框时模式的。只能操作顶层的对话框。]
- //AfxMessageBox(L"dd");
- }
- break;
- case IDCANCEL://删除按钮
- EndDialog(_hwnd, IDCANCEL); //销毁对话框,并返回IDCANCEL
- break;
- default:
- break;
- }
- return TRUE;
- }
- case WM_NCHITTEST:
- {
- SendMessage(_hwnd, WM_NCLBUTTONDOWN, HTCAPTION, lp);
- break;
- }
- }
- return FALSE;
- }
- void CMy2005DlgTestDlg::OnBnClickedButton10()
- {
- // TODO: 在此添加控件通知处理程序代码
- //DialogBoxParam();
- DialogBoxParam(0, MAKEINTRESOURCE(IDD_DIALOG1), 0, DialogProc, (LPARAM)this);
- }
阅读(4810) | 评论(0) | 转发(0) |