64,642
社区成员
发帖
与我相关
我的任务
分享
//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;
}
BOOL CMyWnd::PreProcessMsg(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParam,LRESULT *pResult)
{
//Your process code here;
return true;
}
LRESULT CMyWnd::OnCreate(HWND hWnd)
{
//WM_CREATE process hander
m_hMenu=LoadMenu(this->m_hInstance,MAKEINTRESOURCE(IDR_TRAYICON));
m_hIcon=LoadIcon(this->m_hInstance,MAKEINTRESOURCE(IDI_MAIN));
return 0;
}
BOOL CMyWnd::OnDestroy()
{
//WM_DESTROY process hander
Destroy();
PostQuitMessage(0);
return true;
}
BOOL CMyWnd::OnCommand(int nCmdID)
{
//WM_COMMAND process hander
return true;
}
BOOL CMyWnd::OnClose()
{
::SendMessage(this->m_hWnd,WM_DESTROY,0,0);
return true;
}
BOOL CMyWnd::CheckClass(LPCTSTR lpClassName)
{
WNDCLASS ws={0};
if(!GetClassInfo(m_hInstance,lpClassName,&ws))
{
ws.hIcon=m_hIcon;
ws.hbrBackground=(HBRUSH)COLOR_APPWORKSPACE;
ws.lpfnWndProc=WndProc;
ws.lpszClassName=lpClassName;
return RegisterClass(&ws);
}
return true;
}
LRESULT CALLBACK CMyWnd::WndProc(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParam)
{
LRESULT lResult=0;
BOOL bCallDefault=true;
CMyWnd *pWnd=(CMyWnd *)GetProp(hWnd,"MyWnd");
if(pWnd==NULL)
{
if(nMsg!=WM_CREATE)
{
return DefWindowProc(hWnd,nMsg,wParam,lParam);
}
else
{
LPCREATESTRUCT pSt=(LPCREATESTRUCT)lParam;
pWnd=(CMyWnd *)pSt->lpCreateParams;
SetProp(hWnd,"MyWnd",pWnd);
}
}
if(!pWnd->PreProcessMsg(hWnd,nMsg,wParam,lParam,&lResult))
{
return lResult;
}
switch(nMsg)
{
case WM_CREATE:
{
pWnd->m_hWnd=hWnd;
lResult=pWnd->OnCreate(hWnd);
bCallDefault=false;
break;
}
case WM_DESTROY:
bCallDefault=pWnd->OnDestroy();
break;
case WM_COMMAND:
bCallDefault=pWnd->OnCommand(LOWORD(wParam));
break;
case WM_CLOSE:
pWnd->OnClose();
bCallDefault=false;
break;
case WM_USERNOTIFY:
pWnd->OnUserNotify(wParam,lParam);
bCallDefault=false;
break;
default:
break;
}
if(bCallDefault)
{
return DefWindowProc(hWnd,nMsg,wParam,lParam);
}
else
{
return lResult;
}
}