您的位置:首页 > 其它

Win32 API SDK 自绘窗口简单封装类

2016-11-07 02:08 288 查看
实现窗口简单的封装,新手笔记,大牛请多多指教

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;   //窗口句柄
};


LoWindow.cpp 

/**
* \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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: