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

问题描述 投票:2回答:1

我目前正在尝试使用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上阅读,看起来,参数代表对话框“父”窗口。

但是,我还没有创建任何其他窗口,所以没有什么可以传递给它。

我不得不掌握,我不知道,我的...桌面窗口?那样的东西?我真的无法弄明白。

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

c++ winapi atl wtl
1个回答
2
投票

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

另见CDialog::CreateAfxGetMainWnd

© www.soinside.com 2019 - 2024. All rights reserved.