c++ - 我将使用哪个 HWND 在 WinMain 函数中创建对话框?

标签 c++ winapi atl wtl

我目前正在尝试用WTL练习C++,我现在面临这个问题。到目前为止,我已经使用 WTL 相当多了,但我总是有一个已经实现了最基本的窗口创建的模板。不过,我现在想自己做,因为我现在无法访问模板。

以下:

这是我的 WinMain:

#include "stdafx.h"
#pragma once
#include "MusicPlayerDialog.h"
#include "resource.h"

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hInstPrev,
    LPSTR szCmdLine, int nCmdShow)
{
    UNREFERENCED_PARAMETER(szCmdLine);
    UNREFERENCED_PARAMETER(hInstPrev);

    _Module.Init(NULL, hInst);

    MusicPlayerDialog myDialog;
    MSG msg;

    myDialog.Create( **//PROBLEM//** )

    myDialog.ShowWindow(nCmdShow);
    myDialog.UpdateWindow();

    while (GetMessage(&msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}

这是我的对话框:

#pragma once
#include "stdafx.h"
#include "resource.h"

class MusicPlayerDialog : public CDialogImpl<MusicPlayerDialog> 
{
public:

    enum { IDD = IDD_MAINDIALOG };

    BEGIN_MSG_MAP(MusicPlayerDialog)
        MESSAGE_HANDLER(WM_CLOSE, OnClose)
        MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
        MESSAGE_HANDLER(WM_INITDIALOG, OnInit)
    END_MSG_MAP()

    LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    LRESULT OnInit(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

private:

};

我真的很想用对话框来完成它,因为对于像我这样的初学者来说,使用对话框设计器创建 GUI 更容易。我很确定使用原始窗口更好,但我现在只想学习窗口、对话框等之间的通信。

我现在的问题是,我不知道要传递什么给myDialog.Create()

首先,问题是我必须传递给它的 HWND。我在 MSDN 上阅读,看起来该参数代表对话框“父”窗口。

但是,我还没有创建任何其他窗口,因此没有任何内容可以传递给它。

我是否必须获得我的……桌面窗口的句柄,我不知道?类似的事情?我实在想不通。

我知道有一种方法可以获取给定窗口/对话框的父窗口,但我认为这在这里不起作用,因为没有什么可以获取的。

最佳答案

如果第二个参数为CDialog::Create ( pParentWnd ) 为 NULL,则对话框对象的父窗口将设置为主应用程序窗口。另一种选择是使用 CWnd* AFXAPI AfxGetMainWnd( );如果从应用程序的主线程调用,则返回应用程序的主窗口。

另请参阅CDialog::CreateAfxGetMainWnd

关于c++ - 我将使用哪个 HWND 在 WinMain 函数中创建对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34456572/

相关文章:

c++ - 将一个数组中的 char 值分配给另一个数组中的 char 值

python - 使用 Python 将 Excel 中的图表导出为图像

c++ - InitializeCriticalSectionEx 不是 atlwinverapi.h 中全局命名空间的成员

com - 为什么ATL COM注册默认为HKCR

windows - 如果从静态库调用,Atl CDialogImpl 不会显示在 DoModal 上

c++ - 是否可以在不使用 main() 函数的情况下编写程序?

c++ - 通过空行 boost 分割字符串

c++ - 不会覆盖提供的结构的本地时间替代方案

winapi - 如何检测程序执行过程中目录中的更改?

C++ WINAPI 窗口不刷新