创建windlg.h
#include <windows.h>
#include <tchar.h>
#ifndef WINDLG_H
#define WINDLG_H
#define mystyle CS_HREDRAW | CS_VREDRAW
class windlg
{
public:
//***********************************
//构造函数声明
windlg(); //构造函数
//***********************************
//析构函数声明
~windlg();
//***********************************
//类内静态回调函数声明
static LRESULT CALLBACK WndprocMine(
HWND hwnd,
UINT message ,
WPARAM wParam,
LPARAM lParam );
//***********************************
//类内c创建函数声明
bool createwin( HINSTANCE hInstance,
WNDPROC lpfnWndProc=windlg::WndprocMine);
//***********************************
//类内测试函数声明
void test();
HWND getHwnd();
private:
HWND hwnd; //窗口句柄
};
#endif
创建windlg.cpp
#include "windlg.h"
//**************************************
//构造函数
windlg::windlg():
hwnd(NULL){ }
//**************************************
//析构函数
windlg::~windlg(){}
//**************************************
//创建窗口函数
bool windlg::createwin(
HINSTANCE hInstance,
WNDPROC lpfnWndProc )
{
TCHAR className[]=L"你好";
TCHAR winName[]=L"大家好!!!";
WNDCLASSEX wndclass;
wndclass.style=CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc=lpfnWndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor=LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject( WHITE_BRUSH );
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = className ;
wndclass.cbSize = sizeof( WNDCLASSEX );
wndclass.hIconSm = NULL;
//注册窗口
if (RegisterClassEx(&wndclass)==NULL){
MessageBox(NULL,TEXT("失败信息"),TEXT("窗口注册失败!!!"),MB_OKCANCEL);
return false;
}
else {
MessageBox(NULL,TEXT("成功信息"),TEXT("窗口注册成功!!!"),MB_OKCANCEL);
}
//创建窗口
hwnd=CreateWindowEx(
WS_EX_CLIENTEDGE,
className ,
winName,
WS_OVERLAPPEDWINDOW,
100,100,600,400,
NULL,NULL,hInstance,NULL);
if (hwnd==NULL){
MessageBox(NULL,L"创建主窗口时发生错误qq群!",L"错误信息",MB_OK|MB_ICONSTOP);
return false;
}
//显示窗口
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd);
//寄存当前对象指针
SetWindowLongPtr(hwnd,GWL_USERDATA,(DWORD)this);
return true;
}
//**************************************
//测试函数
void windlg::test()
{
::MessageBox(NULL,L"成功调用",L"类内回调函数调成功!!!",MB_OKCANCEL);
}
//**************************************
//静态回调函数定义
LRESULT CALLBACK windlg::WndprocMine(
HWND hwnd,
UINT message ,
WPARAM wParam,
LPARAM lParam )
{
windlg *pObject=(windlg*)GetWindowLongPtr(hwnd,GWL_USERDATA);
switch (message)
{
case WM_RBUTTONDOWN:
pObject->test();
break;
case WM_DESTROY:
PostQuitMessage(0);
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
//**************************************
//获得当前窗口句柄
HWND windlg::getHwnd()
{
return hwnd;
}
创建winmain.cpp
#include "windlg.h"
//普通回调函数声明
LRESULT CALLBACK wndproc(HWND hwnd,
UINT message ,
WPARAM wParam,
LPARAM lParam ) ;
int WINAPI WinMain( __in HINSTANCE hInstance,
__in_opt HINSTANCE hPrevInstance,
__in LPSTR lpCmdLine,
__in int nShowCmd )
{
windlg winFirst;
//这段代码调用类内静态回调函数
if (winFirst.createwin(hInstance)==false){
return 0;
}
//消息循环
MSG msg;
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
//普通回调函数
LRESULT CALLBACK wndproc(HWND hwnd,
UINT message ,
WPARAM wParam,
LPARAM lParam )
{
windlg *pObject=(windlg*)GetWindowLongPtr(hwnd,GWL_USERDATA);
switch (message)
{
case WM_LBUTTONDOWN:
MessageBox(NULL,L" ",L"外函数!!!",MB_OKCANCEL);
pObject->test();
break;
case WM_DESTROY:
PostQuitMessage(0);
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}