一、作业目的:
-
了解 windows操作系统应用程序开发的基本概念,win32 API函数、消息与事件驱动;
-
掌握WinMain函数的基本框架,窗口定义、窗口创建、消息循环及窗口过程函数;
二、作业要求:
动手写第一个基于windows API 的基于窗体、消息循环、事件驱动的 Windows C语言风格的Windows 程序。
三、代码
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WinSunProc//CALLBACK函数是由Windows系统调用,程序不会调用他
(
HWND hwnd, // 窗口句柄
UINT uMsg, // 窗口消息
WPARAM wParam, // 附加参数
LPARAM lParam // 附加参数
);
int WINAPI WinMain //c程序一般的进入点是Main,而Windows程序的进入点是WinMain
(
HINSTANCE hInstance, // 当前-应用程序实例句柄
HINSTANCE hPrevInstance, // 先前-应用程序实例句柄
LPSTR lpCmdLine, // 指向字符串的指针(LP-长指针,STR-字符串)
int nCmdShow //
)
{
WNDCLASS wndcls;//定义窗口类
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;//附加内存
wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//画刷句柄,窗口的背景
wndcls.hCursor=LoadCursor(NULL,IDC_ARROW);//光标句柄
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);//图标句柄
wndcls.hInstance=hInstance;//实例化
wndcls.lpfnWndProc=WinSunProc;//回调函数
wndcls.lpszClassName="Class1";//类名
wndcls.lpszMenuName=NULL;//菜单名字
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls);//注册窗口类
HWND hwnd;//定义句柄,为窗口标识
hwnd=CreateWindow("Class1","我的窗口",WS_OVERLAPPEDWINDOW,
0,0,600,400,NULL,NULL,hInstance,NULL);//创建窗口
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WinSunProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch(uMsg)
{
case WM_CHAR://按下键盘按键时
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,szChar,"消息",0);
break;
case WM_LBUTTONDOWN://鼠标左键按下
MessageBox(hwnd,"鼠标点击","消息",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"再见",strlen("再见"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT://窗口绘制
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"你好",strlen("你好"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE://关闭窗口
if(IDYES==MessageBox(hwnd,"是否真的结束?","消息",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY://窗口销毁
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
四、运行结果
打开窗口
鼠标点击窗口空白处
按下键盘Q
关闭窗口