【发布时间】:2017-11-01 13:58:05
【问题描述】:
我在创建一个非常简单的 CDialog 应用程序时遇到了一些麻烦。我的目标是在我的代码的 main 函数中启动一个 CDialog 实例,等待它关闭并继续。当我在对话框中添加图片时,问题就出现了,它只是没有出现。我什至尝试以编程方式将其加载到 CStatic 中,在那里我找到了解决方法。如果我使用CBitmap::LoadBitmap(...),它会返回错误ERROR_RESOURCE_NAME_NOT_FOUND,但如果我使用::LoadImage(GetModulehandle(0), ...),它确实有效。所以看来问题出在模块句柄上。一个重要的注意事项是,如果我尝试将我的应用程序设置为无模式(使用 CWinApp),一切都可以完美运行,但我需要一个模态 CDialog!我不会放弃我的主要功能。提前谢谢你。
以防万一它可能有用,这里是代码(几乎全部):
MyDialog.h
#include<afxwin.h>
#include"resource.h"
class CMyDialog: public CDialog{
public:
enum{ IDD = IDD_DIALOG1 };
CMyDialog();
~CMyDialog();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
protected:
DECLARE_MESSAGE_MAP()
};
MyDialog.cpp
#include"MyDialog.h"
CMyDialog::CMyDialog(): CDialog(CMyDialog::IDD){
}
CMyDialog::~CMyDialog(){
}
void CMyDialog::DoDataExchange(CDataExchange* pDX){
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
END_MESSAGE_MAP()
main.cpp
#include"MyDialog.h"
int main(){
CMyDialog mDialog;
mDialog.DoModal();
return 0;
}
【问题讨论】:
-
没有“模态”或“非模态”应用程序。模态或非模态是指对话框相对于其余应用程序的行为,即它是否允许用户与应用程序中的其他窗口进行交互。但在你的情况下,对话框是唯一的窗口......至于你的问题,我认为问题是由于没有按要求创建应用程序。尝试创建一个新的“基于对话框”的 MFC 应用程序,而不仅仅是自己使用 main()。
-
这个窗口将成为一个更大项目的一部分,当它出现时它需要停止与其他窗口的交互,这就是我所说的模态但我用错了,我是 MFC 的新手和一般的VC++。我不想使用该向导,因为它创建的项目基本上是 Visual Studio 的 UI,这让我无法理解它的小组件是如何工作的。是的,主要功能缺少一些说明,但现在它可以工作了。谢谢!
-
嗯,不确定这种方式是否可以阻止调用应用程序。加载您的应用程序后,该调用可能会立即返回。也许考虑将其改为 dll?
标签: c++ visual-c++ mfc