第1课 用C语言函数编写对话框之一直接实践
【参考资料:孙鑫VC++教学视频】
学习理论总是有点枯燥,而且也需要耐心,慢慢的去理解;那我们就直接实践,动手完成一个用C语言系统函数(API函数)实现的对话框;
一、实现步骤,总共5个步骤;
★★★★★创建一个完整的窗口需要经过下面四个操作步骤:
1)、设计一个窗口类(其实是一个结构体);如:WNDCLASS wndcls;
就是为这个结构体的各个分量赋值,设计一个窗口;
2)、注册窗口类;
如:RegisterClass(&wndcls);
3)、创建窗口;
如:CreateWindow(),CreateWindowEX();
4)、显示及更新窗口。如:ShowWindow(),UpdateWindow();
5)、消息循环GetMessage从消息队列中获得消息;
二、编程实现
1、建立空工程:win32 Application工程;
2、建立源文件:C++Source文件,不是头文件;
3、加头文件:windows.h, stdio.h;
4、定义主函数:WinMain函数,从msdn中拷贝函数头部;
具体做法:msdn索引中搜索WinMain,出现多个主题,选择Windows User
Interface:Platform SDK;不要选择Windows CE API Reference;
拷贝并修改为:
int WINAPI WinMain(
HINSTANCE
hInstance,
// handle to current instance
HINSTANCE
hPrevInstance, // handle to previous
instance
LPSTR
lpCmdLine,
// command line
int
nCmdShow
// show state
)
{
。。。。。。。。
}
5、主函数的参数暂且不表,后面有时间再补充;
现在我们准备实现主函数体:
//第一步:设计窗口;WndClass,实际上是一个结构体;
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL, IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL, IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName="Weixin2003";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
//第二步:注册窗口;
RegisterClass(&wndcls);
//第三步:创建窗口;
HWND hwnd;
hwnd=CreateWindow("Weixin2003","北京维新科学技术培训中心",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);
}
6、主函数里面已经完成,接下来我们要创建窗口过程函数;
★用switch来处理各种消息;
switch(uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf(szChar, "char is %d", wParam);
MessageBox(hwnd, szChar,"weixin",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse clicked", "weixin", 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, "是否真的结束", "weixin", MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, uMsg, wParam,lParam );
}
可以运行看效果,第一课最感性的直接实践就结束了,当然,对里面有些代码还会存在一些疑问,接下去会慢慢分析【待续】。