实现窗口简单的封装,新手笔记,大牛请多多指教
LoWindow.h 代码
/**
* \file LoWindow.h
* 自绘窗口的实现类
*/
#pragma once
class LoWindow
{
public:
LoWindow(void);
~LoWindow(void);
private:
LoWindow(const LoWindow &OtherWindow);
LoWindow &operator=(const LoWindow &OtherWindow);
public:
/*创建窗口需要的参数
* ParentHwnd 父句柄
* LoWindowClass 窗口的类名
* lWndProc窗口消息函数
*/
BOOL Create(HWND lParentHwnd,TCHAR LoWindowClass[],WNDPROC lWndProc);
//窗口显示
BOOL Show();
private:
/** 消息回调函数
*/
static LRESULT CALLBACK lpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
public:
WNDPROC m_WndProc;//默认消息回调函数
HWND m_hWnd; //窗口句柄
};
/**
* \file LoWindow.cpp
* 自绘窗口的实现类
*/
#include "stdafx.h"
#include "LoWindow.h"
LoWindow::LoWindow(void): m_hWnd(NULL)
{
}
LoWindow::~LoWindow(void)
{
}
BOOL LoWindow::Create(HWND lParentHwnd,TCHAR LoWindowClass[],WNDPROC lWndProc)
{
HINSTANCE hInst = (HINSTANCE)GetWindowLong(lParentHwnd,GWL_HINSTANCE);
if(!LoWindowClass){
MessageBox(lParentHwnd,"类名不能为空","ERROR",MB_ICONERROR);
return FALSE;
}
WNDCLASSEX lowc;
memset(&lowc,0,sizeof(WNDCLASSEX));
lowc.hInstance = NULL;
lowc.lpszClassName = LoWindowClass;
lowc.cbSize = sizeof(WNDCLASSEX);
lowc.style = NULL;
if(!lWndProc){
lowc.lpfnWndProc = lpWndProc;
}else
lowc.lpfnWndProc = lWndProc;
lowc.cbClsExtra = 0;
lowc.cbWndExtra = 0;
lowc.hIcon = NULL;
lowc.hCursor = LoadCursor(NULL,IDC_ARROW);
lowc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
lowc.lpszMenuName = NULL;
lowc.hIconSm = NULL;
if (!RegisterClassEx(&lowc)){
char szBuffer[128];
sprintf(szBuffer,"error is : %u",GetLastError());
MessageBox(lParentHwnd,szBuffer,"ERROR",MB_ICONERROR);
return -1;
}
m_hWnd = CreateWindow(LoWindowClass, "LW窗口", WS_VISIBLE,0, 0, 100, 100, lParentHwnd, NULL, NULL, NULL);
if (!m_hWnd)
{
char szBuffer[128];
sprintf(szBuffer,"error is : %u",GetLastError());
MessageBox(lParentHwnd,szBuffer,"ERROR",MB_ICONERROR);
return FALSE;
}
SetParent(m_hWnd,lParentHwnd);
return TRUE;
}
BOOL LoWindow::Show(){
ShowWindow(m_hWnd, SW_SHOW);
UpdateWindow(m_hWnd);
return TRUE;
}
LRESULT CALLBACK LoWindow::lpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
int wmId, wmEvent;
switch (message)
{
case WM_CREATE:
//MessageBox(NULL,"WM_CREATE","error",0);
break;
default:
return DefWindowProc( hWnd, message, wParam, lParam);
}
return 0;
}