Win32开发入门(14):用对话框作为主窗口
Win32开发入门(14):用对话框作为主窗口
前面我们在编写Win32应用程序的思路都是:
1、设计窗口类。2、注册窗口类。3、创建窗口 。……
然而,当我们接触控件以后, 会发现一个问题,我们在窗口上放置控件实在不好弄,而 资源中的对话框具有图形编辑器,操作起来相对方便。
于是,就有了一个想法:把对话框用作 主窗口,那我们在布局控件时就轻松了。
其实这想法在网上已有牛人做了,不过,人家是用 Win32汇编干的,当然,要把它变为C++就更简单了。
首先,介绍第一个法子,直接以桌面作为 父窗口来创建对话框。
1、创建一个对话框资源,界面就发挥你的设计天赋了。
2、创建 一个图标资源,既作为应用程序的图标(VS编译时会选择第一个添加到资源中的图标作为EXE的图标) ,也作为对话框的图标。
3、在代码中创建并显示对话框。
#include
#include "resource.h"
// 开启可视化效果
#pragma comment(linker,"\"/manifestdependency:type='win32' \ name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \ processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
HINSTANCE hgInst;
int WINAPI WinMain(HINSTANCE hThisApp, HINSTANCE hPrevApp, LPSTR lpCmd, int nShow)
{
hgInst = hThisApp;
HWND hdlg = CreateDialog(hThisApp, MAKEINTRESOURCE(IDD_MY),GetDesktopWindow(),
(DLGPROC)DlgProc);
if(!hdlg)
{
return 0;
}
ShowWindow(hdlg,SW_SHOW);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_INITDIALOG:
// 设置对话框的图标
SendMessage(hDlg, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(hgInst,
MAKEINTRESOURCE(IDI_APP)));
return 0;
case WM_SYSCOMMAND:
if(wParam == SC_CLOSE)
{
PostQuitMessage(0 );//退出
}
return 0;
}
return (INT_PTR)FALSE;
}