-创建和显示窗体实例

本例在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);

	///创建窗
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值