在我的应用程序中,我想从另一个线程向对话框发送消息.我想将std :: exception派生类引用传递给对话框.
像这样的东西:
try {
       //do stuff
}
catch (MyException& the_exception) {
    PostMessage(MyhWnd, CWM_SOME_ERROR, 0, 0); //send the_exception or the_exception.error_string() here
}
Run Code Online (Sandbox Code Playgroud)
我想在对话框中收到消息并显示错误    the_exception.error_string()
LPARAM CMyDlg::SomeError(WPARAM, LPARAM)
{
    show_error( ?????
    return 0;
}
Run Code Online (Sandbox Code Playgroud)
std::string the_exception.error_string()我猜,传递使用PostMessage也没关系.
有人能告诉我如何在MFC的Visual c + + 6.0中创建非模态对话框并显示它吗?我写了这段代码:
CDialog dialog;
if (dialog.init(initialization values...))
   dialog.DoModal();
Run Code Online (Sandbox Code Playgroud)
但它阻止我的应用程序显示对话框.我不知道是否存在任何方法或其他方法.
谢谢
我有一个对话框(CDialog派生类),可以以两种不同的方式使用(编辑模式和编程模式).
打开对话框以在编程模式下使用时,它是一个无模式对话框,用于修改主视图(工具栏的类型).当它在编辑模式下打开时,用户可以更改对话框本身的配置,在这种情况下,它是一个模态对话框.
现在它们是两个不同的对话框,几乎没有差异,我想只需要对话框,让用户只需按对话框中的按钮即可在编程模式和编辑模式之间切换.
所以我需要在运行时在模态对话框中转换无模式对话框,反之亦然.有办法实现吗?
谢谢.
我需要一个类似于cdialog(或whiptail)的对话框工具,但它可以在Windows上运行.
我有MinGW并且从源代码编译东西没有问题,但cdialog和whiptail,我所知道的唯一,包含特定于UNIX的代码,因此它们不能在Windows上编译.
我可以使用任何替代品吗?我宁愿不必自己弄清楚并替换特定于平台的代码.
我们正在从VC8升级到VC10,并且发现了许多与CDialog相关的内存泄漏.下面的代码使用一个只有许多按钮的CDialog来演示最简单的例子.在VC10中泄漏,但在VC8中它不会:
for (int i = 0; i < 5000; ++i) {
  CDialog* dialog = new CDialog;
  dialog->Create(IDD_LEAKER, 0);
  dialog->DestroyWindow();
  delete dialog;
}
Run Code Online (Sandbox Code Playgroud)
内存使用率不断上升,我们使用大约30个按钮的示例对话框泄漏了Mb的10s.
请注意,上面是一个测试示例,我们已经删除了所有对话框处理代码,在我们的实际代码中,我们有一个派生类并使用PostNcDestroy().
奇怪的是,VC8或VC10中都没有以下代码示例泄漏:
CDialog* dialog = new CDialog;
for (int i = 0; i < 5000; ++i) {
  dialog->Create(IDD_LEAKER, 0);
  dialog->DestroyWindow();
}
delete dialog;
for (int i = 0; i < 5000; ++i) {
  CDialog* dialog = new CDialog;
  delete dialog;
}
Run Code Online (Sandbox Code Playgroud)
我们在这里失踪了什么?
有没有办法从CDialog派生类(如CWnd :: m_hWnd成员)检索窗口句柄?
谢谢
我有一个模块,可以创建一个包含ActiveX控件的无模式对话框。该模块是MFC EXE应用程序的一部分,并且对话框的创建工作正常。最近,我将模块移到ATL / COM服务器中,并将对话框资源从EXE复制到COM服务器中。尝试使用CDialog::Create()错误创建无模式对话框时发生。
我调试到CDialog::Create并注意到它的失败,::CreateDialogIndirect()返回NULL和GetLastError回报0。我在对话框资源属性中将“ No Fail Create”标志设置为True,并获得了更多有关错误的详细信息。问题发生在该对话框的DoDataExchange()的中DDX_Control宏。这会CDataExchange::PrepareCtrl()使用控件的资源ID 调用,如下所示:
HWND CDataExchange::PrepareCtrl(int nIDC)
{
   ASSERT(nIDC != 0);
   ASSERT(nIDC != -1); // not allowed
   HWND hWndCtrl;
   COleControlSite* pSite = NULL;
   m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
   if (hWndCtrl == NULL)
   {
      // Could be a windowless OCX
      pSite = m_pDlgWnd->GetOleControlSite(nIDC);
      if (pSite == NULL)
      {
         TRACE(traceAppMsg, 0, "Error: no data exchange control with ID 0x%04X.\n", nIDC);
         ASSERT(FALSE);
         AfxThrowNotSupportedException(); …Run Code Online (Sandbox Code Playgroud) CDialog和CDialogEx有什么区别?我决定使用CDialog,因为如果Dlg是从CDialogEx派生的,则无法将m_pMainWnd分配给Dlg。
BOOL CPreparationApp::InitInstance()
{
    MyClass2 Dlg; //derived from CDialog 
    m_pMainWnd = &Dlg;
    Dlg.DoModal();
    return TRUE;
}
Run Code Online (Sandbox Code Playgroud)
通过不使用表单向导提供的CDialogEx,我可能会遇到什么样的问题?
如何分配从CDialogEx派生的m_pMainWnd变量?
我有一个 C++ 类,MyDialog派生自CDialog,我在其中删除了 Windows 框架,从而删除了 Windows 生成的阴影。
我想再次添加阴影,而不添加框架。我发现有一种CS_DROPSHADOW可以应用的类风格。但我找不到如何应用它。
我找到了一个方法ModifyStyle,但它只修改WS_...样式,而不修改CS_...样式。
如何应用课堂风格CS_DROPSHADOW?
cdialog ×9
mfc ×7
c++ ×3
visual-c++ ×3
com-server ×1
compare ×1
console ×1
cwnd ×1
dropshadow ×1
handle ×1
memory-leaks ×1
modal-dialog ×1
postmessage ×1
scripting ×1
shell ×1
window ×1
windows ×1