封装第一个window应用程序

创建windlg.h

#include <windows.h>
#include <tchar.h>
#ifndef WINDLG_H
#define WINDLG_H

#define mystyle CS_HREDRAW   |   CS_VREDRAW   

class windlg
{
public:
//***********************************
//构造函数声明
    windlg(); //构造函数


//***********************************
//析构函数声明
	~windlg();


//***********************************
//类内静态回调函数声明
static LRESULT  CALLBACK WndprocMine(  
		HWND   hwnd,  
		UINT message ,  
		WPARAM wParam,  
		LPARAM lParam ); 

//***********************************
//类内c创建函数声明
bool createwin(   HINSTANCE hInstance,
				  WNDPROC   lpfnWndProc=windlg::WndprocMine);
		             
	 
//***********************************
//类内测试函数声明
void test();
HWND getHwnd();

private: 
	HWND hwnd; //窗口句柄
	

	
};

#endif


创建windlg.cpp

#include "windlg.h"


//**************************************
//构造函数
windlg::windlg():
        hwnd(NULL){ }


//**************************************
//析构函数
windlg::~windlg(){}


//**************************************
//创建窗口函数
bool windlg::createwin(
			HINSTANCE hInstance,
			WNDPROC   lpfnWndProc )
{


	TCHAR className[]=L"你好";  
	TCHAR winName[]=L"大家好!!!";  

	WNDCLASSEX wndclass;  

	wndclass.style=CS_HREDRAW   |   CS_VREDRAW   ;   
	wndclass.lpfnWndProc=lpfnWndProc;  
	wndclass.cbClsExtra=0;  
	wndclass.cbWndExtra=0;  
	wndclass.hInstance=hInstance;  
	wndclass.hIcon=LoadIcon   (NULL,   IDI_APPLICATION)   ;   
	wndclass.hCursor=LoadCursor   (NULL,   IDC_ARROW)   ;   
	wndclass.hbrBackground   = (HBRUSH) GetStockObject( WHITE_BRUSH );             
	wndclass.lpszMenuName     =   NULL   ;             
	wndclass.lpszClassName   = className  ;  
	wndclass.cbSize = sizeof( WNDCLASSEX );  
	wndclass.hIconSm = NULL;  


	//注册窗口
	if (RegisterClassEx(&wndclass)==NULL){
		MessageBox(NULL,TEXT("失败信息"),TEXT("窗口注册失败!!!"),MB_OKCANCEL);
		return false;
	}
	else {
		MessageBox(NULL,TEXT("成功信息"),TEXT("窗口注册成功!!!"),MB_OKCANCEL);
	}
	
	//创建窗口
	hwnd=CreateWindowEx(
		WS_EX_CLIENTEDGE,  
		className ,  
		winName,  
		WS_OVERLAPPEDWINDOW,  
		100,100,600,400,  
		NULL,NULL,hInstance,NULL);  

	if (hwnd==NULL){  
		MessageBox(NULL,L"创建主窗口时发生错误qq群!",L"错误信息",MB_OK|MB_ICONSTOP);  
		return false;  
	} 

	//显示窗口
	ShowWindow(hwnd,SW_SHOW);
	UpdateWindow(hwnd);

	//寄存当前对象指针
	SetWindowLongPtr(hwnd,GWL_USERDATA,(DWORD)this);

	return true;
}

//**************************************
//测试函数
void windlg::test()
{
	::MessageBox(NULL,L"成功调用",L"类内回调函数调成功!!!",MB_OKCANCEL);
}


//**************************************
//静态回调函数定义
LRESULT  CALLBACK windlg::WndprocMine(
	           HWND   hwnd,  
			  UINT message ,  
			  WPARAM wParam,  
			  LPARAM lParam )
{
	windlg *pObject=(windlg*)GetWindowLongPtr(hwnd,GWL_USERDATA);
	switch (message)
	{
	case WM_RBUTTONDOWN:
		pObject->test();
		break;
	case WM_DESTROY:
		
		PostQuitMessage(0);
	
	default:
		 return DefWindowProc(hwnd,message,wParam,lParam);
	}

	return 0;

}
//**************************************
//获得当前窗口句柄
HWND windlg::getHwnd()
{
	return hwnd;
}


创建winmain.cpp

#include "windlg.h"

//普通回调函数声明
LRESULT CALLBACK wndproc(HWND hwnd,   
	UINT message ,   
	WPARAM wParam,   
	LPARAM lParam )  ;


int WINAPI WinMain( __in HINSTANCE hInstance,
	                __in_opt HINSTANCE hPrevInstance,
					__in LPSTR lpCmdLine, 
					__in int nShowCmd )
{
	windlg winFirst;

	//这段代码调用类内静态回调函数
	if (winFirst.createwin(hInstance)==false){
	return 0;
	}

	//消息循环
	MSG msg;  
	while(GetMessage(&msg,NULL,0,0)){  
		TranslateMessage(&msg);  
		DispatchMessage(&msg); 
	}

	return 0;
}

//普通回调函数
LRESULT CALLBACK wndproc(HWND hwnd,   
	UINT message ,   
	WPARAM wParam,   
	LPARAM lParam )  
{  
	windlg *pObject=(windlg*)GetWindowLongPtr(hwnd,GWL_USERDATA);
	switch (message)  
	{  
		
	case WM_LBUTTONDOWN:  
		MessageBox(NULL,L"  ",L"外函数!!!",MB_OKCANCEL); 
		pObject->test();
		break;  
	case WM_DESTROY:
		
		PostQuitMessage(0);
		
	default:  
		return DefWindowProc(hwnd,message,wParam,lParam);  
	}  
	return 0;  
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值