搞不清楚消息处理函数
刚开始学习windows编程 从网上找的视频 他使用的vc6.0,我的编译器是 vs2012 我在编写时找不到 网上使用的消息处理函数 WndProc WindowProc ,WinSunProc我的编译器上都没有,只找到了 DefWindowProc,运行时不出现窗口,求大神指教
1>源.cpp(71): warning C4273: “DefWindowProcW”: dll 链接不一致
1> C:\Program Files (x86)\Windows Kits\8.0\Include\um\winuser.h(3993) : 参见“DefWindowProcW”的前一个定义
1> Win32Project2.vcxproj -> D:\vc\Win32Project2\Debug\Win32Project2.exe
#define _CRT_SECURE_NO_WARNINGS
#define HYCOMMONWINAPI_EXPORTS
#include<iostream>
#include<Windows.h>
#include<stdio.h>
using namespace std;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrewInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASS wndclass;
//WNDPROC
static LPCTSTR szAppName = L"weixin"; //定义窗口类名
wndclass.hbrBackground //这是一个画刷的句柄
= (HBRUSH)GetStockObject(DKGRAY_BRUSH);//深灰色的画刷,注意:要加上前面的强制类型转换以适应该句柄
/*---DKGRAY_BRUSH--深灰色---*/
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);//装载一个光标 :标准光标 一个箭头形状的光标
//IDC 意思是:identify cursor(定义光标) arrow--箭头
wndclass.hIcon = LoadIcon(NULL, IDI_ERROR);//定义图标
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = DefWindowProc;//****************
wndclass.lpszClassName = szAppName;//注意:类型转换
wndclass.lpszMenuName =NULL;//窗口菜单的名字 因为没有 菜单 所以不需要名字 置为 NULL
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
RegisterClass(&wndclass);//向操作系统 注册这个 窗口类 之后才能使用该窗口类
HWND hwnd;//定义一个窗口句柄
hwnd = CreateWindow(szAppName, L"北京培训中心",//要将 char* 类型的数据变为 LPCTSTR 类型的数据
WS_OVERLAPPEDWINDOW, //产生一个层叠的窗口 有标题栏和边框
CW_USEDEFAULT, //使用 缺省的值
CW_USEDEFAULT,
CW_USEDEFAULT,
C2_WHITESPACE,
NULL, //换为 0 也可以
NULL,
hInstance, //应用程序实例的句柄
NULL);
ShowWindow(hwnd, //传入窗口句柄
SW_SHOWNORMAL //显示状态:正常显示
);//显示该窗口
UpdateWindow(hwnd); //窗口的刷新
//消息循环
MSG msg; //定义一个窗口消息结构体的变量
//使用 GetMessage函数从消息队列中取出消息
while (GetMessage(&msg,NULL, 0, 0))
{
TranslateMessage(&msg); //翻译消息
DispatchMessage(&msg); //将消息传入到 操作系统中
}
//return static_cast<int>(msg.wParam);
return 0;
}
//消息处理函数,窗口过程函数
LRESULT CALLBACK DefWindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
HDC hdc;
PAINTSTRUCT ps;
switch(uMsg)
{
case WM_PAINT://窗口尺寸变化时 窗口重绘
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 0, 0, L"北京培训", strlen("北京培训"));
EndPaint(hwnd, &ps);
break;
case WM_CHAR: //在键盘上按下了某个按键
char szChar[20];
sprintf(szChar, "char is %d", wParam);//wParam 存放了所按键的 ASCII码,将之存放到字符数组中
//让当前窗口弹出消息框
MessageBox(hwnd, //传入当前窗口的句柄
(LPCTCH)szChar, //传入消息文本
(LPCTCH)"weixin", //消息框的标题
MB_OK); //消息框类型 包含了一个ok按钮(就是一个 0 的宏定义)
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd, L"mouse click", L"winxin", MB_OK);
HDC hDC;//定义一个 DC的句柄(他是一个系统内部维护的数据结构)
hDC = GetDC(hwnd);//获得该窗口的 DC的句柄
TextOut(hDC, 0, 50, L"你太帅了!!!", strlen("你太帅了!!!"));
ReleaseDC(hwnd, hDC);//释放内存
break;
case WM_CLOSE://关闭窗口消息
if(IDYES == MessageBox(hwnd, L"你是否退出程序?", L"winxin", MB_YESNO))
{
DestroyWindow(hwnd);//销毁窗口
}
break;
case WM_DESTROY://销毁窗口消息
PostQuitMessage(0);//退出消息框
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}