CWinApp CFrameWindow 未显示

Posted

技术标签:

【中文标题】CWinApp CFrameWindow 未显示【英文标题】:CWinApp CFrameWindow not shown 【发布时间】:2017-03-29 08:48:59 【问题描述】:

我正在尝试使用 CFrameWindow 创建窗口,我使用了“使用 Visual C++ 进行应用图论模拟”中的代码,但它没有入口点,所以它不起作用。所以我尽可能地简化了它,现在当应用程序在发布模式下启动时,窗口不会出现,在调试模式下它会抛出断言失败的错误。我使用 MSVS Visual C++ -> 常规 -> 空项目,将“使用 MFC”设置为在共享 DLL 中使用 MFC。

代码如下:

#include <afxwin.h>

class MyWnd : public CFrameWnd

public:
    MyWnd()   Create(0, "MyWnd"); 
    ~MyWnd()  
;

class MyApp : public CWinApp

public:
    virtual BOOL InitInstance()
    
        m_pMainWnd = new MyWnd;
        m_pMainWnd->ShowWindow(m_nCmdShow);
        return TRUE;
    
;

int CALLBACK WinMain (_In_ HINSTANCE hInstance, _In_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow)

    MyApp myApp;
    myApp.InitInstance();
    myApp.Run();

编辑:更新为调用 MyApp.Run(),但它仍然不显示任何内容,还检查了子系统,未选择任何内容,尝试了控制台、Windows、Native,仅使用 Windows 编译但没有帮助。

【问题讨论】:

您使用哪种子系统类型(请参阅 project-proerties -> 链接器 -> 系统 -> 子系统)。 子系统:没有选择,尝试了控制台、Windows、Native,仅使用 Windows 编译但没有帮助。 【参考方案1】:

在 InitInstance 之后,您应该调用 CWinApp::Run 以启动消息泵送。 此外,Run() 会阻止 WinMain 函数,直到它退出。如果没有 Run(),您的 WinMain 只会在您看到窗口之前终止。

【讨论】:

现在我可以在任务管理器中看到它,但它没有显示任何内容。 根本没有窗框?没有关闭-最小化-最大化按钮?【参考方案2】:

因此,当我使用 myApp.Run() 或不使用 myApp 使 myApp 成为全局时,它会显示带有标题栏的空白窗口。

编辑:它在我的笔记本电脑 win10 上工作,但在 pc win7 上相同的代码不起作用,所以在项目属性中的 pc 上 -> 字符集是多字节的,在将其更改为 Unicode 后,它也开始在 pc 上显示窗口。

【讨论】:

以上是关于CWinApp CFrameWindow 未显示的主要内容,如果未能解决你的问题,请参考以下文章

CWinApp类

反应本机图像 URI 未显示

CWinApp::OpenDocumentFile 创建一个新窗口

DLL 使用没有 CWinApp 的 MFC?

Chrome打印对话框未显示或src失败

CWinApp和CFrameWnd