求用c++打包的窗口类,最简单的那种
求用c++封装的窗口类,最简单的那种
LRESULT CALLBACK MainProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
WNDCLASS wc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hIcon = NULL;
wc.hInstance = hInstance;
wc.lpfnWndProc = MainProc;
wc.lpszClassName = TEXT("Window");
wc.lpszMenuName = NULL;
wc.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wc);
HWND hwnd = CreateWindow(TEXT("Window"),"text",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK MainProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CLOSE:
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
{
PostQuitMessage(0);
}
break;
}
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
以上代码是我用API写的,最简单的只有一个窗口的代码,现在要把它用C++封装成一个窗口类,不要用MFC的那种,就自己封装的,求高手指教!
谢谢!
------解决方案--------------------
LRESULT CALLBACK MainProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
WNDCLASS wc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hIcon = NULL;
wc.hInstance = hInstance;
wc.lpfnWndProc = MainProc;
wc.lpszClassName = TEXT("Window");
wc.lpszMenuName = NULL;
wc.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wc);
HWND hwnd = CreateWindow(TEXT("Window"),"text",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK MainProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CLOSE:
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
{
PostQuitMessage(0);
}
break;
}
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
以上代码是我用API写的,最简单的只有一个窗口的代码,现在要把它用C++封装成一个窗口类,不要用MFC的那种,就自己封装的,求高手指教!
谢谢!
------解决方案--------------------
//MyWnd.h
#pragma once
#include "windows.h"
class CMyWnd
{
public:
CMyWnd();
virtual ~CMyWnd();
HWND CreateEx(HINSTANCE hInst,DWORD dwExStyle,LPCTSTR lpText,DWORD dwStyle,LPRECT lprcWnd,HWND hParent,int nMenuID,int nIconID);
HWND CreateEx(DWORD dwStyle,int x,int y,int nWidth,int nHeight,HWND hParent);
void Destroy();
HWND GetWnd();
BOOL Show(int nCmd);
protected:
virtual BOOL PreProcessMsg(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParam,LRESULT *pResult);
virtual LRESULT OnCreate(HWND hWnd);
virtual BOOL OnDestroy();
virtual BOOL OnCommand(int nCmdID);
virtual BOOL OnClose();
protected:
BOOL CheckClass(LPCTSTR lpClassName);
static LRESULT CALLBACK WndProc(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParam);
public:
HWND m_hWnd;
protected:
HICON m_hIcon;
HMENU m_hMenu;
HINSTANCE m_hInstance;
};
//MyWnd.cpp
#include "CMyWnd.h"
#include "resource.h"
CMyWnd::CMyWnd():m_hWnd(NULL),m_hMenu(NULL),m_hInstance(NULL),m_hIcon(NULL)
{
}
CMyWnd::~CMyWnd()
{
if(m_hWnd)
{
Destroy();
}
}
HWND CMyWnd::CreateEx(HINSTANCE hInst,DWORD dwExStyle,LPCTSTR lpText,DWORD dwStyle,LPRECT lprcWnd,HWND hParent,int nMenuID,int nIconID)
{
if(m_hWnd)
{
return m_hWnd;
}
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));
}
if(nIconID > 0)
{
m_hIcon=LoadIcon(m_hInstance,MAKEINTRESOURCE(nIconID));
}
CheckClass("MyWnd");
m_hWnd=CreateWindowEx(dwExStyle,"MyWnd",lpText,dwStyle,x,y,nWidth,nHeight,hParent,m_hMenu,m_hInstance,this);
return m_hWnd;
}
HWND CMyWnd::CreateEx(DWORD dwStyle,int x,int y,int nWidth,int nHeight,HWND hParent)
{
RECT rc={x,y,x+nWidth,y+nHeight};
return CreateEx(NULL,0,"MyWnd",dwStyle,&rc,hParent,0,0);
}
void CMyWnd::Destroy()
{
if(m_hWnd)
{
DestroyWindow(m_hWnd);
m_hWnd=NULL;
}
}
BOOL CMyWnd::Show(int nCmd)
{
return ShowWindow(m_hWnd,nCmd);
}
HWND CMyWnd::GetWnd()
{
return m_hWnd;
}