按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
hWnd=CreateWindow (〃SdkDemo1〃; // 窗口类名
〃第一个Win32 SDK应用程序〃; // 窗口标题
WS_OVERLAPPEDWINDOW; // 窗口样式
CW_USEDEFAULT; // 初始化 x 坐标
CW_USEDEFAULT; // 初始化 y 坐标
CW_USEDEFAULT; // 初始化窗口宽度
…………………………………………………………Page 139……………………………………………………………
CW_USEDEFAULT; // 初始化窗口高度
NULL; // 父窗口句柄
NULL; // 窗口菜单句柄
hInstance; // 程序实例句柄
NULL); // 创建参数
// 显示窗口
ShowWindow(hWnd;SW_SHOW);
// 更新主窗口客户区
UpdateWindow(hWnd);
// 开始消息循环
while (GetMessage(&msg;NULL;0;0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg。wParam;
}
// WndProc 主窗口过程
LRESULT WINAPI WndProc (HWND hWnd;
UINT msg;
WPARAM wParam;
LPARAM lParam)
{
HDC hdc;
RECT rc;
HPEN hPen;hPenOld;
…………………………………………………………Page 140……………………………………………………………
HBRUSH hBrush;hBrushOld;
switch (msg)
{
case WM_PAINT:
hdc=GetDC(hWnd);
GetClientRect(hWnd;&rc);
hPen=CreatePen(PS_SOLID;0;RGB(0;0;0));
hBrush=CreateHatchBrush(HS_DIAGCROSS;RGB(0;0;0));
hPenOld=SelectObject(hdc;hPen);
hBrushOld=SelectObject(hdc;hBrush);
Ellipse(hdc;rc。left;rc。top;rc。right;rc。bottom);
SelectObject(hdc;hPenOld);
SelectObject(hdc;hBrushOld);
ReleaseDC(hWnd;hdc);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
break;
}
return DefWindowProc(hWnd;msg;wParam;lParam);
}
该示例代码中的所有内容都已在前面做了完整的讲解,这里我们简单
的说一下如何在Microsoft Developer Studio中编译该示例程序。请
按下面的步骤进行:
1。 选择File菜单下的New命令,新建一个Win32 Application工程,
…………………………………………………………Page 141……………………………………………………………
这里我们假设对该工程命名为SdkDemo1,而事实上这完全取决于你的
意愿。这个过程已经在本书的第一章中作为介绍,这里就不再重复说
明了。
2。 选择Project菜单下的Add To Project|New。。。命令,向工程中添
加一个C++ Source File (C++源文件),可以将该文件命名为
winmain。cpp,不需要键入扩展名,Microsoft Developer Studio在
创建文件时会 自动加上。cpp的后缀名。这个过程也已经在第一章中作
过介绍。阅读过该章内容的读者不应感到陌生。然后在Wordspace窗
口的FileView 中双击文件名winmain。cpp (在依赖于你在前面过程中
的设定),输入下面的源代码即可。
如果已将源代码输入为C++源文件 (以。cpp为后缀名的文件),则可以
使用Project|Add To Project|Files。。。将其添加到工程中。
图3。2 示例程序SdkDemo1的运行结果
3。 单击Build菜单下的Build SdkDemo1。exe或Build All或按下快捷
键F7 (如果未对该快捷键做过 自定义操作的话)或单击Build或Build
Minibar工具条上的 按钮,编译并创建可执行文件SdkDemo1。exe,
运行该可执行文件 (从Developer Studio中或资源管理器均可),将得
到如图3。2所示的结果。
前面已经不只一次说到过,使用这种方式编写的应用程序使用调试和
维护的难度很大。这个问题是使用直接使用SDK编程的固有总是。但
是,我们还是有办法可以使得该程序的结构更紧凑和更集中一些,从
而改善代码的可读性,也使得它更接近于使用SDK编写的真正的Win32
应用程序。
…………………………………………………………Page 142……………………………………………………………
通过分析应用程序,我们发现,在上面的程序代码中,WinMain函数
的代码显得有些过分臃肿,解决总是的办法就是将这些代码分离为单
个的函数,这样,我们就可以得到更实用的基本SDK应用程序框架,
当然,相对于MFC所提供的应用程序框架来说,我们的这个应用程序
框架几乎不值一提,但是,它的确是要比前面的示例程序好多了。
经过修改的代码如下:
#include
// 函数原型
int WINAPI WinMain(HINSTANCE;HINSTANCE;LPSTR;int);
LRESULT WINAPI WndProc(HWND;UINT;WPARAM;LPARAM);
BOOL InitApplication(HINSTANCE);
BOOL InitInstance(HINSTANCE;int);
// WinMain 函数
int WINAPI WinMain (HINSTANCE hInstance;
HINSTANCE hPrevInstance;
LPSTR lpCmdLine;
int nCmdShow)
{
if (!hPrevInstance)
if (!InitApplication(hInstance))
return FALSE;
if (!InitInstance(hInstance;SW_SHOW))
return FALSE;
MSG msg; // 窗口消息
// 开始消息循环
while (GetMessage(&msg;NULL;0;0))
{
…………………………………………………………Page 143……………………………………………………………
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg。wParam;
}
// WndProc 主窗口过程
LRESULT WINAPI WndProc (HWND hWnd;
UINT msg;
WPARAM wParam;
LPARAM lParam)
{
HDC hdc;
RECT rc;
HPEN hPen;hPenOld;
HBRUSH hBrush;hBrushOld;
switch (msg)
{
case WM_PAINT:
hdc=GetDC(hWnd);
GetClientRect(hWnd;&rc);
hPen=CreatePen(PS_SOLID;0;RGB(0;0;0));
hBrush=CreateHatchBrush(HS_DIAGCROSS;RGB(0;0;0));
hPenOld=SelectObject(hdc;hPen);
hBrushOld=SelectObject(hdc;hBrush);
Ellipse(hdc;rc。left;rc。top;rc。right;rc。bottom);
SelectObject(hdc;hPenOld);
…………………………………………………………Page 144……………………………………………………………
SelectObject(hdc;hBrushOld);
ReleaseDC(hWnd;hdc);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
break;
}
return DefWindowProc(hWnd;msg;wParam;lParam);
}
BOOL InitApplication(HINSTANCE hInstance)
{
WNDCLASS wc; // 窗口类
// 填充窗口类信息
wc。style=CS_HREDRAW|CS_VREDRAW;
wc。lpfnWndProc=WndProc;
wc。cbClsExtra=0;
wc。cbWndExtra=0;
wc。hInstance=hInstance;
wc。hIcon=LoadIcon(NULL;IDI_APPLICATION);
wc。hCursor=LoadCursor(NULL;IDC_ARROW);
wc。hbrBackground=GetStockObject(WHITE_BRUSH);
wc。lpszMenuName=NULL;
wc。lpszClassName=〃SdkDemo2〃;
// 注册窗口类
………………………………………………………