我将使用哪个 HWND 在 WinMain 函数中创建对话框?
Which HWND would I use to create a dialog in my WinMain function?
我目前正在尝试使用 WTL 练习 C++,但我现在正面临这个问题。到目前为止,我已经使用 WTL 进行了大量工作,但我始终有一个模板,其中已经实现了最基本的 window 创建。但是,我现在想自己做,因为我现在无法访问模板。
以下:
这是我的 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 更容易。我很确定使用原始 windows 更好,但我现在只想了解 windows、对话框等之间的通信。
我现在的问题是,我不知道要传递给什么 myDialog.Create()
首先,问题是我必须传递给它的 HWND。我在 MSDN 上阅读过,看起来,参数代表对话框 "Parent" Window。
但是,我还没有创建任何其他 windows,所以没有任何东西可以传递给它。
我是否必须获得我不知道的...桌面的句柄window?像那样的东西?实在想不通
我知道有一种方法可以获取给定 window/dialog 的父 window,但我认为这在这里行不通,因为没有什么可以获取的。
如果 CDialog::Create
(pParentWnd
) 的第二个参数为 NULL,则对话框对象的父 window 设置为主应用程序 window。另一种选择是使用 CWnd* AFXAPI AfxGetMainWnd( );
what returns 应用程序的主线程 window 如果它是从应用程序的主线程调用的。
另见 CDialog::Create and AfxGetMainWnd
我目前正在尝试使用 WTL 练习 C++,但我现在正面临这个问题。到目前为止,我已经使用 WTL 进行了大量工作,但我始终有一个模板,其中已经实现了最基本的 window 创建。但是,我现在想自己做,因为我现在无法访问模板。
以下:
这是我的 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 更容易。我很确定使用原始 windows 更好,但我现在只想了解 windows、对话框等之间的通信。
我现在的问题是,我不知道要传递给什么 myDialog.Create()
首先,问题是我必须传递给它的 HWND。我在 MSDN 上阅读过,看起来,参数代表对话框 "Parent" Window。
但是,我还没有创建任何其他 windows,所以没有任何东西可以传递给它。
我是否必须获得我不知道的...桌面的句柄window?像那样的东西?实在想不通
我知道有一种方法可以获取给定 window/dialog 的父 window,但我认为这在这里行不通,因为没有什么可以获取的。
如果 CDialog::Create
(pParentWnd
) 的第二个参数为 NULL,则对话框对象的父 window 设置为主应用程序 window。另一种选择是使用 CWnd* AFXAPI AfxGetMainWnd( );
what returns 应用程序的主线程 window 如果它是从应用程序的主线程调用的。
另见 CDialog::Create and AfxGetMainWnd