我目前正在尝试用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上读了一下,似乎这个参数代表了对话框的“父”窗口。
然而,我还没有创建任何其他窗口,所以没有什么可以传递给它。
我不知道我的…桌面窗口必须有个句柄吗?像这样吗?我真的想不通。
我知道有一种方法可以抓取给定窗口/对话框的父窗口,但考虑到没有什么可抓取的,我认为这在这里不起作用。