在学完c++基础知识后,我试着看了一下windows编程的知识,大学时学过一些基本概念。所以现在学起来不会太费力。这个文章就当做一个入门吧。
我们做任何系统的开发,都离不开框架,框架都会有一个框架模型。比如现在web领域编程中比较流行的SSH框架,其模型就是MVC架构,我们在框架的基础上编程,无外乎是两点,一点是框架的API,一点是在框架特定的接口下编程。我们主要做这两点,其他都由框架来调用,这就是IOC和AOP中的原理:“你不用来找我,我来找你”。
windows也不例外,我们也完全可以理解为一个框架,只是这个框架太复杂了,模型太多了,。但是有一个最最基础的模型,就是消息驱动模型。windows应用程序的处理过程是这样的:当操作鼠标键盘或其他外设时,windows会自动产生一个对应的消息,将其消息放置在应用程序的消息队列中,应用程序将取出消息,并对消息作出响应,在作出响应的时候,应用程序会调用windows的API来实现特定的功能。这就是一个基本的过程了。
说这么多,我们直接先写个例子吧,作为一个helloworld的实例。
1 新建Win32 Application的空项目,然后再新建一个cpp源文件,源文件中包含的代码如下:
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASS wndclass;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW );
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = WinProc;
wndclass.lpszClassName = "bplead";
wndclass.lpszMenuName = NULL;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndclass);
HWND hwnd;
hwnd = CreateWindow("bplead","bplead",WS_OVERLAPPEDWINDOW,0,0,800,600,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch(uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf(szChar, "char code is %d", wParam);
MessageBox(hwnd, szChar, "char", 0);
break;
/**case WM_LBUTTONDOWN:
break;**/
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 0, 0, "HelloWorld!",11);
EndPaint(hwnd, &ps);
break;
case WM_CLOSE:
if(IDYES == MessageBox(hwnd,"close window?","",MB_YESNO))
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
2 看看运行效果:
3 HelloWorld的例子就完成了,虽然复制粘贴代码很简单,但是里面的知识很多。我想放在下一篇文章里面详细讲解。一篇文章说的多了,是个很恐怖的事情。