标签: cdialog

如何通过PostMessage发送字符串?

在我的应用程序中,我想从另一个线程向对话框发送消息.我想将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也没关系.

c++ mfc multithreading postmessage cdialog

16
推荐指数
1
解决办法
2万
查看次数

如何显示非模态CDialog?

有人能告诉我如何在MFC的Visual c + + 6.0中创建非模态对话框并显示它吗?我写了这段代码:

CDialog dialog;
if (dialog.init(initialization values...))
   dialog.DoModal();
Run Code Online (Sandbox Code Playgroud)

但它阻止我的应用程序显示对话框.我不知道是否存在任何方法或其他方法.

谢谢

c++ mfc cdialog visual-c++

13
推荐指数
5
解决办法
3万
查看次数

在运行时将无模式对话框转换为模态

我有一个对话框(CDialog派生类),可以以两种不同的方式使用(编辑模式和编程模式).

打开对话框以在编程模式下使用时,它是一个无模式对话框,用于修改主视图(工具栏的类型).当它在编辑模式下打开时,用户可以更改对话框本身的配置,在这种情况下,它是一个模态对话框.

现在它们是两个不同的对话框,几乎没有差异,我想只需要对话框,让用户只需按对话框中的按钮即可在编程模式和编辑模式之间切换.

所以我需要在运行时在模态对话框中转换无模式对话框,反之亦然.有办法实现吗?

谢谢.

mfc modal-dialog cdialog

9
推荐指数
1
解决办法
7784
查看次数

Windows命令行对话框工具

我需要一个类似于cdialog(或whiptail)的对话框工具,但它可以在Windows上运行.

我有MinGW并且从源代码编译东西没有问题,但cdialog和whiptail,我所知道的唯一,包含特定于UNIX的代码,因此它们不能在Windows上编译.

我可以使用任何替代品吗?我宁愿不必自己弄清楚并替换特定于平台的代码.

windows shell console scripting cdialog

7
推荐指数
2
解决办法
4294
查看次数

CD10中的CDialog内存泄漏

我们正在从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)

我们在这里失踪了什么?

mfc memory-leaks cdialog visual-studio-2010 visual-c++

7
推荐指数
1
解决办法
1667
查看次数

如何从CDialog派生类中获取窗口句柄?

有没有办法从CDialog派生类(如CWnd :: m_hWnd成员)检索窗口句柄?

谢谢

window handle cdialog cwnd

5
推荐指数
1
解决办法
6280
查看次数

CDialog :: Create对于带有ActiveX控件的对话框失败

我有一个模块,可以创建一个包含ActiveX控件的无模式对话框。该模块是MFC EXE应用程序的一部分,并且对话框的创建工作正常。最近,我将模块移到ATL / COM服务器中,并将对话框资源从EXE复制到COM服务器中。尝试使用CDialog::Create()错误创建无模式对话框时发生。

我调试到CDialog::Create并注意到它的失败,::CreateDialogIndirect()返回NULLGetLastError回报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)

mfc cdialog com-server

5
推荐指数
1
解决办法
4320
查看次数

CDialog和CDialogEx之间的区别

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变量?

mfc compare cdialog visual-c++

5
推荐指数
2
解决办法
7962
查看次数

如何将 CS_DROPSHADOW 应用于 CDialog 的子类

我有一个 C++ 类,MyDialog派生自CDialog,我在其中删除了 Windows 框架,从而删除了 Windows 生成的阴影。

我想再次添加阴影,而不添加框架。我发现有一种CS_DROPSHADOW可以应用的类风格。但我找不到如何应用它。

我找到了一个方法ModifyStyle,但它只修改WS_...样式,而不修改CS_...样式。

如何应用课堂风格CS_DROPSHADOW

c++ mfc cdialog dropshadow

2
推荐指数
1
解决办法
2637
查看次数