2.4 Windows应用程序举例(1)
与控制台程序相比,虽然编制一个Windows应用程序所需要的代码要多得多,但Windows应用程序所具有的功能强大和易操作的特性是控制台程序所不能比拟的。与其他应用程序一样,基于Windows的C应用程序也有自己的结构,称为Win32应用程序结构。
【例2.1】一个完整的Windows应用程序generic举例(Ex2_01)。
(1) 在Microsoft Visual C++(www.cppentry.com) 6.0中选择File→new菜单命令,打开New对话框。选择Project标签,从列表框选中"Win32 Application"选项,如图2.16所示。
(2) 在工程名称文本框中输入Win32应用程序项目名称"generic"。在Location下的编辑框中直接输入文件夹名称,或单击浏览按钮选择一个已有的文件夹。
(3) 单击OK按钮继续。一个询问项目类型的Win32应用程序向导将被显示,从中选中"An empty project(一个空的工程)"选项。单击Finish按钮,系统将显示AppWizard(应用程序向导)的创建信息,单击OK按钮,系统将自动创建此应用程序。
(4) 在Microsoft Visual C++(www.cppentry.com) 6.0的File菜单中,选择New命令,打开New对话框。单击Files标签,在左边的列表框中选择C++(www.cppentry.com) Source File选项,在右边的File文本框中输入"generic.cpp",单击OK按钮,如图2.17所示。
|
| (点击查看大图)图2.16 New对话框的工程界面 |
|
| (点击查看大图)图2.17 New对话框文件页面 |
(5) 在文档窗口中输入如下代码:
- #include <windows.h>
- #include <stdio.h>
- HINSTANCE hInst;
- HWND hWndMain;
- LRESULT CALLBACK WndProc(HWND, UINT, WPARAM,LPARAM);
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,
- PSTR lpszCmdLine, int nCmdShow)
- {
- MSG msg;
- WNDCLASS wnd;
- wnd.style = CS_HREDRAW|CS_VREDRAW;
- wnd.cbClsExtra = 0;
- wnd.cbWndExtra = 0;
- wnd.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);
- wnd.hCursor = ::LoadCursor(NULL, IDC_ARROW);
- wnd.hIcon = ::LoadIcon(NULL, IDI_APPLICATION);
- wnd.hInstance = hInstance;
- wnd.lpfnWndProc = WndProc;
- wnd.lpszClassName = "generic";
- wnd.lpszMenuName = NULL;
- if (!RegisterClass(&wnd))
- {
- return FALSE;
- }
- hWndMain = CreateWindow("generic",
- "简单的窗口演示程序",
- WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- NULL,
- NULL,
- hInstance,
- NULL
- );
- ShowWindow(hWndMain,nCmdShow);
- UpdateWindow(hWndMain);
- while(GetMessage(&msg,NULL,0,0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return msg.wParam;
- }
- LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
- WPARAM wParam, LPARAM lParam)
- {
- HDC hdc;
- PAINTSTRUCT ps;
- char *hello = "这是一个Windows模板程序!";
- char Buffer[256];
- int x, y;
- switch(message)
- {
- case WM_PAINT:
- hdc = BeginPaint(hwnd,&ps);
- TextOut(hdc, 20, 10, hello, lstrlen(hello));
- EndPaint(hwnd, &ps);
- break;
- case WM_CHAR:
- hdc = GetDC(hwnd);
- sprintf(Buffer, " ");
- TextOut(hdc, 0, 0, Buffer, strlen(Buffer));
- sprintf(Buffer, "%c", wParam);
- TextOut(hdc, 0, 0, Buffer, strlen(Buffer));
- ReleaseDC(hwnd,hdc);
- break;
- case WM_LBUTTONDOWN:
- hdc = GetDC(hwnd);
- x = LOWORD(lParam);
- y = HIWORD(lParam);
- Ellipse(hdc, x-10, y-10, x+10, y+10);
- break;
- case WM_DESTROY:
- PostQuitMessage(0);
- break;
- default:
- return(DefWindowProc(hwnd, message, wParam, lParam));
- }
- return (0);
- }
【责任编辑:
云霞 TEL:(010)68476606】