Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CDialog不显示在任务栏中_C++_Windows_Mfc - Fatal编程技术网

C++ CDialog不显示在任务栏中

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

我正在尝试获取一个没有边框或框架显示在任务栏中的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
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上,它无法按预期工作。当我开始工作的时候,我会去看看其他人。这很聪明,但如果有人有非标准的边框尺寸,它就会失败。你知道,这些都是可配置的。嗯,有没有办法获得客户区偏移量?