自己封装窗口的窗口过程处理

#ifndef __LESSON_06_H__
#define __LESSON_06_H__

#ifdef LESSON_06_EXPORTS
#define LessonApi __declspec(dllexport)
#else
#define LessonApi __declspec(dllimport)
#endif

extern "C" LessonApi void HelloWord();

class LessonApi CXUIWindow
{
public:
	CXUIWindow();
	virtual~CXUIWindow();
public:
	/*
	功能:创建窗口
	*/
	HWND Create(HWND hParentWnd, LPCTSTR pstrName, DWORD dwStyle, const RECT& rc, HINSTANCE hInst);

	void ShowWindow(int nCmdShow);
	void UpdateWindow();
protected:
	/*
	功能:注册窗口类
	*/
	virtual bool RegisterWindowClass();
	/*
	功能:窗口过程回调函数
	*/
	static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
	/*
	获取窗口类名
	*/
	virtual LPCTSTR GetClassName();

	/*
	功能:窗口消息处理
	*/
	virtual LRESULT HandleMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
protected:
	/*消息函数*/
	//virtual LRESULT OnCreate(WPARAM wParam, LPARAM lParam);

private:
	HWND m_hWnd;
	HINSTANCE m_hInst;
};

#endif
// Lesson_06.cpp : 定义 DLL 应用程序的导出函数。
//

#include "stdafx.h"
#include "Lesson_06.h"

void HelloWord()
{
	MessageBox(NULL, L"Hello Word!", L"动态库", MB_OK);
}

CXUIWindow::CXUIWindow()
{
	m_hWnd = NULL;
}

CXUIWindow::~CXUIWindow()
{

}

HWND CXUIWindow::Create(HWND hParentWnd, LPCTSTR pstrName, DWORD dwStyle, const RECT& rc, HINSTANCE hInst)
{
	m_hInst = hInst;
	if (!RegisterWindowClass())
		return NULL;

	CreateWindow(GetClassName(), pstrName, dwStyle, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, hParentWnd, NULL, hInst,this);

	return m_hWnd;
}

bool CXUIWindow::RegisterWindowClass()
{
	WNDCLASS wc = { 0 };
	wc.style = CS_HREDRAW | CS_VREDRAW;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hIcon = NULL;
	wc.lpfnWndProc = WndProc;
	wc.hInstance = m_hInst;
	wc.hCursor = ::LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = NULL;
	wc.lpszMenuName = NULL;
	wc.lpszClassName = GetClassName();
	::RegisterClass(&wc);
	return true;
}

LRESULT CALLBACK CXUIWindow::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	CXUIWindow* pThis = NULL;
	if (message == WM_NCCREATE)
	{
		LPCREATESTRUCT lpcs = reinterpret_cast<LPCREATESTRUCT>(lParam);
		pThis = static_cast<CXUIWindow*>(lpcs->lpCreateParams);
		pThis->m_hWnd = hWnd;
		::SetWindowLongPtr(hWnd, GWLP_USERDATA, reinterpret_cast<LPARAM>(pThis));
	}
	else
	{
		pThis = reinterpret_cast<CXUIWindow*>(::GetWindowLongPtr(hWnd, GWLP_USERDATA));
		if (message == WM_DESTROY)
			::SetWindowLongPtr(hWnd, GWLP_USERDATA, 0);
	}

	if (pThis == NULL)
		return ::DefWindowProc(hWnd, message, wParam, lParam);//默认窗口过程
	else
		return pThis->HandleMessage(hWnd, message, wParam, lParam);
}

LPCTSTR CXUIWindow::GetClassName()
{
	
	return L"XUIWindow";
}

LRESULT CXUIWindow::HandleMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
/*	switch (message)
	{
	case WM_CREATE:
		{
			return OnCreate(wParam, lParam);
		}
		break;
	default:
		break;
	}*/
	return ::DefWindowProc(hWnd, message, wParam, lParam);
}

void CXUIWindow::ShowWindow(int nCmdShow)
{
	::ShowWindow(m_hWnd, nCmdShow);
}

void CXUIWindow::UpdateWindow()
{
	::UpdateWindow(m_hWnd);
}


/*LRESULT CXUIWindow::OnCreate(WPARAM wParam, LPARAM lParam)
{
	return S_OK;
}*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值