|
楼主 |
发表于 2006-6-30 16:23:48
|
显示全部楼层
< align=left><br> <br>1.3.1 概述 现在,已经了解了什么是API函数,下面用API函数编写第一个程序。如图1-3所示展示给大家的是一个再熟悉不过的窗口,在此窗口的中央写着 “Hello,You Are Welcome!”。当按下键盘上的任意一个键时,窗口显示的文本颜色将随机地发生改变。它是在Windows 2000中编译运行程序而得到的效果图。</P>
< align=center><IMG src="http://act.it.sohu.com/book/images/upload//62-1-3.jpg" align=baseline border=0></P>
<H6 align=center><FONT size=2> 图1-3 运行效果图</FONT></H6>
<p>
<p> 图1-3 运行效果图 1.3.2 应用程序实例在字符界面的模式下显示一个字符串只需用到很短的一段代码,如下所示:
<p>#include <stdio.h>
<p>int main()
<p>{
<p>printf(“Hello,You Are Welcome”);
<p>return 0;
<p>}
<p> 在Windows中,涉及到窗口创建和维护、文本的显示等,代码就变得有一点复杂了,但这一切还在可控制之中。
<p> 在Windows中,创建一个窗口实际上也是很简单的,只需调用一个API函数CreateWindow即可。复杂的是,这个函数所带的参数有11个,这些都是需要了解并且在创建过程中需要设定的。在此之前,还需要定义并注册一个窗口类,并为类的各个参数设定要用到的值。
<p>下面是图1-3所示的效果图的源代码。
<p>------------------------------------------------------------
<p>// Hello.c
<p>------------------------------------------------------------
<p>#include <windows.h>
<p>LPCTSTR lpszAppName=TEXT(“MyApp”);
<p>LPCTSTR lpszTitle=TEXT(“My Application”);
<p>
<p>LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
<p>int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
<p>LPTSTR lpCmdLine, int nCmdShow)
<p>{
<p> MSG msg;
<p>HWND hWnd;
<p>WNDCLASSE wc;
<p>// 注册主应用程序的窗口类
<p>wc.style=CS_HREDRAW|CS_VREDRAW;
<p>wc.lpfnWndProc=(WNDPROC)WndProc;
<p>wc.cbClsExtra=0;
<p>wc.cbWndExtra=0;
<p>wc.hInstance=hInstance;
<p>wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
<p>wc.hCursor=LoadCursor(NULL, IDC_ARROW);
<p>wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
<p>wc.lpszMenuName=lpszAppName;
<p>wc.lpszClassName=lpszAppName;
<p>if(!RegisterClass(&wc))
<p>return(FALSE);
<p>// 创建主应用程序的窗口
<p>hWnd=CreateWindow(lpszAppName, lpszTitle,WS_OVERLAPPEDWINDOW,
<p>CW_USEDEFAULT,0, CW_USEDEFAULT, 0,
<p>NULL, NULL, hInstance, NULL);
<p>if (!hWnd)
<p>return(FALSE);
<p>
<p>ShowWindow(hWnd, nCmdShow);
<p>UpdateWindow(hWnd);
<p>
<p>while(GetMessage(&msg, NULL, 0, 0))
<p> {
<p>TranslateMessage(&msg);
<p>DispatchMessage(&msg);
<p> }
<p>return(msg.wParam);
<p>}
<p>--------------------------------------------------------------
<p>// 窗口过程函数
<p>--------------------------------------------------------------
<p>LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg,
<p>WPARAM wParam, LPARAM lParam)
<p>{
<p> RECT rect;
<p> HDC hdc;
<p> PAINTSTRUCT ps;
<p> static int uRed=0, uGreen=0, uBlue=0;
<p>
<p> switch(uMsg)
<p> {
<p>case WM_PAINT :
<p>hdc=BeginPaint(hWnd, &ps);
<p>GetClientRect(hWnd, &rect);
<p>SetTextColor(hdc, RGB(uRed, uGreen, uBlue));
<p>DrawText (hdc, TEXT (“Hello, You Are Welcoming!”), -1, &rect,
<p>DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
<p>EndPaint(hWnd, &ps);
<p> break;
<p>case WM_KEYDOWN :
<p> uRed=rand() % 255;
<p>uGreen=rand() % 255;
<p>uBlue=rand() % 255;
<p>InvalidateRect(hWnd, NULL, TRUE);
<p>break;
<p>case WM_DESTROY :
<p>ostQuitMessage(0);
<p>break;
<p>default :
<p>return DefWindowProc(hWnd, uMsg, wParam, lParam);
<p> }
<p>return(0L);
<p>}
<p> |
|