【问题标题】:CWinApp CFrameWindow not shownCWinApp CFrameWindow 未显示
【发布时间】: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 编译但没有帮助。

标签: c++ visual-c++ mfc


【解决方案1】:

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

【讨论】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 2020-08-22
    相关资源
    最近更新 更多