C++ CDialog不显示在任务栏中
我正在尝试获取一个没有边框或框架显示在任务栏中的CDialog 它是在CWinApp的InitInstance(用于更新应用程序)中创建的,我尝试设置WS_EX_APPWINDOW标志,但它仍然没有显示在任务栏中 有什么想法吗 编辑: 如资源中所定义:C++ CDialog不显示在任务栏中,c++,windows,mfc,C++,Windows,Mfc,我正在尝试获取一个没有边框或框架显示在任务栏中的CDialog 它是在CWinApp的InitInstance(用于更新应用程序)中创建的,我尝试设置WS_EX_APPWINDOW标志,但它仍然没有显示在任务栏中 有什么想法吗 编辑: 如资源中所定义: IDD_UPDATEFORM_DIALOG DIALOGEX 0, 0, 246, 124 STYLE WS_POPUP EXSTYLE WS_EX_APPWINDOW FONT 8, "MS Shell Dlg", 400, 0, 0x1 BE
IDD_UPDATEFORM_DIALOG DIALOGEX 0, 0, 246, 124
STYLE WS_POPUP
EXSTYLE WS_EX_APPWINDOW
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
END
使用时:
UpdateForm *dlg = new UpdateForm(UPDATE_FILES, CWnd::GetDesktopWindow());
INT_PTR nResponse = dlg->DoModal();
UpdateForm::UpdateForm(int updateType, CWnd* pParent) : CDialog(IDD_UPDATEFORM_DIALOG, pParent)
{
m_bInit = false;
m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON);
m_Progress = new DesuraProgress();
m_updateType = updateType;
}
还是这样出现的:
编辑#2:
要设置此窗口的图标(基本上是一个启动屏幕),您可以向窗口发送一条WM_SETICON
消息以及所需的图标
对于对话框,可以在OnInitDialog()
中执行此操作。下面是一个使用默认windows信息图标的代码段,如下所示:
--编辑: 我创建了第二个项目来模拟您的更新,但除了在我的.rc文件中包含DS_SHELLFONT(DS_SETFONT | DS_FIXEDSYS)之外,我看不到任何差异。这些对话框样式定义不会影响对话框的显示
// Member Variable
CHelperDlg *dlg;
// Meanwhile, elsewhere...
dlg = new CHelperDlg();
dlg->Create(IDD_HELPERDLG, CWnd::GetDesktopWindow());
dlg->ShowWindow(SW_SHOW);
// or...
// dlg->DoModal();
我已将我的最小示例的关键部分上载到,以供您参考,以防您想尝试在测试之前添加此对话框
另外,我正在使用VS2010。如果您希望我在该版本中重复此测试,我有VS2008可用
--原件: 创建对话框时,请尝试将桌面窗口(通过
CWnd::GetDesktopWindow()
)指定为父窗口
// Member Variable
CHelperDlg *dlg;
// Meanwhile, elsewhere...
dlg = new CHelperDlg();
dlg->Create(IDD_HELPERDLG, CWnd::GetDesktopWindow());
dlg->ShowWindow(SW_SHOW);
// or...
// dlg->DoModal();
另外,在使用完对话框后,不要忘了在类所有者的析构函数中或其他方便的位置销毁它。我想出了一个解决方法。我没有禁用工具栏/标题栏样式以不获取边框,而是使用SetWindowRgn剪裁框架和标题栏。同样的影响,更少的问题
RECT rect;
GetWindowRect(&rect);
int w = rect.right - rect.left;
int h = rect.bottom - rect.top;
HRGN region = CreateRoundRectRgn(5, 30, w-5, h-5-30, 5, 5);
SetWindowRgn(region, true);
谢谢你到目前为止对meklarian的帮助,但我仍然不能用你的例子来让它工作。我上传到这里:当我把它拖到我的第二个显示器上时,它没有显示任何图标(在主屏幕上显示默认的windows图标),因为“关于”对话框没有显示下载的副本,现在就看它。也许我误解了这里的某些内容。。。它可以工作,也可以与您添加的代码片段一起拖动。您还需要覆盖/设置任务栏图标吗?您正在使用哪些窗口?在Windows7上,它无法按预期工作。当我开始工作的时候,我会去看看其他人。这很聪明,但如果有人有非标准的边框尺寸,它就会失败。你知道,这些都是可配置的。嗯,有没有办法获得客户区偏移量?