本例在SDK下使用API函数实现窗体的创建、销毁、显示和隐藏!
1、打开VC6,单击File/New菜单,选择Win32 Application ,建立工程名为WindowDemo的应用程序。
2、选择“A simple Win32 Application”
3、向工程中添加一个菜单资源,ID为IDR_MAIN,在菜单中添加一个子菜单“测试窗体1”,包含四个菜单项,
ID为:“ID_MI_WND1_CREATE”、“ID_MI_WND1_DESTROY”、“ID_MI_WND1_SHOW”、“ID_MI_WND1_HIDE” ,
文本为“创建”、“销毁”、“显示”、“隐藏”。
再为IDR_MAIN添加第二个子菜单“测试窗体2”,只是把“1”改为“2”
///
///MyWnd.h中
#define MY_WND_PROP_NAME _T("_My_Wnd_Prop_Name_")
#define MY_WND_CLASS_NAME _T("_My_Wnd_Class_Name_")
class CMyWnd
{
public:
CMyWnd();
virtual ~CMyWnd();
//创建窗体
HWND CreateEx(HINSTANCE hInst ,DWORD dwExstyle , LPCTSTR lpText ,DWORD dwStyle ,
LPRECT lprcWnd ,HWND hParent ,int nMenuID);
HWND CreateEX(DWORD dwStyle ,int x,int y , int nWidth ,int nHeight ,HWND hParent);
///销毁窗体
void Destroy();
///显示或隐藏窗体
BOOL Show(int nCmd);
///获取窗体句柄
HWND GetHwnd();
///可直接返回窗体句柄的操作符
operator HWND() const;
protected:
///处理前的派生类调用机会
virtual BOOL preprocessMsg(HWND hWnd ,UINT nMsg ,WPARAM wp ,LPARAM lp ,LRESULT *pResult);
//窗体创建消息
virtual LRESULT OnCreate(HWND hWnd);
///窗体销毁消息
virtual BOOL OnDestroy();
///处理命令按钮消息
virtual BOOL OnCommand(int nCmdID);
///绘制窗体
virtual BOOL OnPaint();
///绘制背景
virtual BOOL OnEraseBk(HDC hDC);
///timer消息
virtual BOOL OnTimer(int nID);
protected:
///检测类是否注册,如果没有注册则注册
BOOL CheckClass(LPCTSTR lpClassName);
///窗体过程
static LRESULT CALLBACK WndProc(HWND hWnd ,UINT nMsg ,WPARAM wp, LPARAM lp);
protected:
HWND m_hWnd;
HMENU m_hMenu;
HINSTANCE m_hInstance;
};
#endif // !defined(AFX_MYWND_H__6B084A95_8F56_430C_909F_6869193CD5AA__INCLUDED_)
// MyWnd.cpp: implementation of the CMyWnd class.
//
//
#include "stdafx.h"
#include "MyWnd.h"
//
// Construction/Destruction
//
CMyWnd::CMyWnd():m_hWnd(NULL),m_hMenu(NULL),m_hInstance(NULL)
{
}
CMyWnd::~CMyWnd()
{
if(m_hWnd)
{
Destroy();
}
}
HWND CMyWnd::CreateEx(HINSTANCE hInst ,DWORD dwExStyle ,LPCTSTR lpText ,DWORD dwStyle ,
LPRECT lprcWnd ,HWND hParent ,int nMenuID)
{
///如果已经创建,返回,防止重复创建
if(m_hWnd)
{
return m_hWnd;
}
///hInst由WinMain传入
m_hInstance = hInst;
///计算窗体尺寸
int x,y,nWidth,nHeight;
if(lprcWnd == NULL)
{
x = y =nWidth = nHeight = CW_USEDEFAULT;
}
else
{
x = lprcWnd->left;
y = lprcWnd->top;
nWidth = lprcWnd->right - lprcWnd->left;
nHeight = lprcWnd->bottom - lprcWnd->top;
}
///如果有菜单,加载菜单,并作为窗体菜单
if(nMenuID > 0 )
m_hMenu = LoadMenu(m_hInstance ,MAKEINTRESOURCE(nMenuID));
///检测类名是否已经注册
CheckClass(MY_WND_CLASS_NAME);
///创建窗