1 / 33

1. Windows 应用程序的工程文件 1.1 创建一个 API 程序 APPWIZARD WIN32 具体步骤 : 1.2 工程文件的组成 1.2.1 工程文件 :

CHAP1 WINDOWS API 编程基础. 1. Windows 应用程序的工程文件 1.1 创建一个 API 程序 APPWIZARD WIN32 具体步骤 : 1.2 工程文件的组成 1.2.1 工程文件 : 源文件的集合 通过编译连接成执行程序或 DLL DSP 代表一个工程文件 DSW 代表一个工作文件 , 可以包含多个工程文件 1.2.2 源代码文件 .H .CPP 1.2.3 资源文件 : 菜单 、 对话框、 图标、 光标、字符串. 2. Windows 数据类型和变量命名规则.

melita
Download Presentation

1. Windows 应用程序的工程文件 1.1 创建一个 API 程序 APPWIZARD WIN32 具体步骤 : 1.2 工程文件的组成 1.2.1 工程文件 :

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CHAP1 WINDOWS API 编程基础 1. Windows应用程序的工程文件 1.1 创建一个API程序 APPWIZARD WIN32 具体步骤: 1.2 工程文件的组成 1.2.1 工程文件: 源文件的集合 通过编译连接成执行程序或DLL DSP代表一个工程文件 DSW 代表一个工作文件,可以包含多个工程文件 1.2.2 源代码文件 .H .CPP 1.2.3 资源文件 : 菜单 、 对话框、 图标、 光标、字符串

  2. 2. Windows 数据类型和变量命名规则 2.1 Windows c/c++ 自定义数据类型

  3. 2.2 常用的数据结构 typedef struct tagPOINT {   LONG x; LONG y; } POINT; typedef struct tagRECT {   LONG left;   LONG top; LONG right; LONG bottom; } RECT; typedef struct tagSIZE { LONG cx; LONG cy; } SIZE;

  4. 2.3 匈牙利命名法

  5. 3. WINMAIN()函数——程序的入口点 • 功能: 创建并显示窗口 • 执行消息循环 • 3.1 函数原型 • int APIENTRY WinMain( • HINSTANCE hInstance, • HINSTANCE hPrevInstance, • LPSTR lpCmdLine, • int nCmdShow)

  6. 3.2 重要概念--Windows对象与句柄 • Windows对象: • 窗口,菜单,光标,图标,应用程序实例… • 句柄: • 提供对 Windows对象的访问途径 • 由操作系统给定 • 唯一代表 Windows对象的整型数 • HINSTANCE:代表一个应用程序的实列句柄 • HMEN:菜单 • HWND:窗口 • HICON:图标 • HCURSOR:光标

  7. 3.3 窗口的创建与显示 3.3.1 窗口与窗口类 窗口: 外观;矩形区域 要素:标题,菜单,边框,窗口工作区, 最大化 最小化 恢复框 功能:提供图形操作界面 主窗口——代表一个应用程序单元 窗口对象的访问: HWND 窗口类: 用于创建窗口的模板 决定了窗口的以下属性:图标、光标、菜单 决定窗口的功能(对用户操作的响应) WNDCLASS(EX)结构

  8. WNDCLASSEX结构 typedef struct _WNDCLASSEX { UINT cbSize; //定义窗口类结构的大小,如sizeof(WNDCLASSEX). UINT style; //定义窗口样式,如CS_HREDRAW |CS_VREDRAW WNDPROC lpfnWndProc; //指向窗口过程函数的指针 int cbClsExtra; //分配在窗口类结构后的字节数 int cbWndExtra; //分配在窗口实例后的字节数 HINSTANCE hInstance; //定义窗口类应用程序的实例句柄 HICON hIcon; //窗口类的图标 HCURSOR hCursor; //窗口类的光标 HBRUSH hbrBackground; //窗口类的背景填充色 LPCTSTR lpszMenuName; //窗口类的菜单资源名 LPCTSTR lpszClassName; //窗口类的名称 HICON hIconSm; //与窗口类相关联的小图标句柄 } WNDCLASSEX, *PWNDCLASSEX;

  9. 3.3.2 了解有关API函数 注册窗口类:RegisterWndClass() ATOM RegisterClass( CONST WNDCLASS *lpWndClass ); 创建窗口:CreateWindow() HWND CreateWindow( LPCTSTR lpClassName, // 注册的窗口类名 LPCTSTR lpWindowName, // 窗口的标题名 DWORD dwStyle, // 窗口的风格 int x, // 窗口左上角的x坐标值 int y, // 窗口左上角的y坐标值 int nWidth, // 窗口的宽度 int nHeight, // 窗口的高度 HWND hWndParent, // 父窗口句柄 HMENU hMenu, // 主菜单句柄 HINSTANCE hInstance, // 应用程序的实例句柄 LPVOID lpParam // 指向一个传递给窗口的参数值指针 );

  10. 可以通过位或(|)操作实现窗口样式的自定义组合可以通过位或(|)操作实现窗口样式的自定义组合 例如: WS_VSCROLL| WS_POPUP表示窗口样式为有垂直滚动条的弹出式窗口

  11. 显示窗口:ShowWindow() 函数 BOOL ShowWindow( HWND hWnd,int nCmdShow ) 更新窗口: UpdateWindow()函数 BOOL UpdateWindow( HWND hWnd);

  12. System class • BUTTON • COMBOBOX • EDIT • LISTBOX • RichEdit • RICHEDIT_CLASS • SCROLLBAR • STATIC

  13. EX1.1 改变窗口类的属性,观察程序运行结果, 窗口类决定窗口的哪些属性。

  14. 3.4 消息循环 从消息队列中检取消息,并发送到窗口过程函数由程函数处理消息。 3.4.1重点概念: 消息、消息队列 消息: 每发生一个用户操作事件,操作系统产生一条对应的消息 WM_KEYDOWN WM_LBUTOWDOWN WM_COMMAND 消息可以不一定由用户操作产生 WM_PAINT WM_CREATE

  15. 了解MSG结构 typedef struct tagMSG { HWND hwnd; // identifies the window UINT message;//the message number WPARAM wParam; LPARAM lParam;//additional information DWORD time; // message posted time POINT pt; //cursor position } MSG;

  16. WM_CREATE • WM_DESTROY • WM_PAINT • WM_SIZE • int cx=LOWORD(lParam); • int cy=HIWORD(lParam) • WM_KEYDOWN • wParam -virtual-key code of the nonsystem key • WM_LBUTTONDOWN • xPos = GET_X_LPARAM(lParam); • yPos = GET_Y_LPARAM(lParam);

  17. 消息队列: WINDOWS操作系统维护的缓冲区,WINDOWS为每一个应用程序的主线程创建一个消 息队列,用于存放消息,等待被消息循环捡取. 3.4.2 了解有关API函数 GetMessage() TranslateMessage() DispachMessage()

  18. GetMessage()函数 • 从消息队列检取消息,放到消息结构变量中。 • 如果检取到除WM_QUIT消息外的消息,返回值非零; 如果检取到WM_QUIT消息,返回值为零。 • 如果消息队列中没有消息,把程序控制权转给其它程序。

  19. 函数原型: BOOL GetMessage( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax );

  20. TranslateMessage() 把按键消息翻译成字符消息,放入消息队列中 BOOL TranslateMessage( CONST MSG *lpMsg // address of structure with message); • DispatchMessae() 把消息发送到窗口过程函数。 • LONG DispatchMessage( CONST MSG *lpmsg // pointer to structure with message);

  21. 4. 窗口过程函数 • 4.1 函数原型: • LRESULT CALLBACK WndProc( • HWND hWn, • UINT message, • WPARAM wParam, • LPARAM lParam) • 4.2 功能: • 实现对消息处理, • WINDOWS程序的主要工作就是响应并处理消息

  22. 4.3响应消息 • ….. • switch(msg) { • case WM_ : • //Operation1 • break; • case WM_ : • //Operation2 • break; • ….. • case WM_DESTROY • PostQuitMessage(0); • break • default: • return DefaultWindowProc(hWnd,message,wParam,lParam ); • } • …..

  23. 4.4缺省窗口过程函数 • 功能: • 处理所有未被处理的消息, 某些消息必须进行缺省的处理, 如:WM_PAINT消息 EX1.2 消息处理实列 设计要求,把文本显示移动到鼠标的位置

  24. 5. 资源编辑答与资源文件 资源ID 唯一标识资源 5.1字符串与资源 ①编辑资源 ②使用字符串资源 LoadString( ) 5.2 图标资源 ①编辑 ②LoadIcon() 5.3光标资源 ①编辑 ②LoadCursor() EX 1.3 编辑资源

  25. 常用的窗口操作函数 • BOOL MoveWindow( • HWND hWnd, // handle to window • int X, // horizontal position • int Y, // vertical position • int nWidth, // width • int nHeight, // height • BOOL bRepaint // repaint option • );

  26. BOOL EnableWindow( • HWND hWnd, // handle to window • BOOLbEnable // enable or disable input • );

  27. 6. 本章总结 • 6.1工程文件 • 集合了源程序(代码)与资源文件(数据), • 代码与数据分开 • 可以由多个源代码文件,但资源文件只能有一个。

  28. 6.2 WinMain( )函数 • 程序入口点 • 实现窗口的创建,显示等初始化工作, • 执行消息循环 • 一个工程中只有一个WinMain函数 • 6.3窗口过程函数 • 处理各种类型的消息一个窗口类对应一个窗口过程函数。

  29. 6.4资源 • 特殊形式的数据 • 资源有ID来标识; • 代码中使用资源需要通过函数装载; • 资源文件.RC,编译后.RES • 6.5 运行应用程序:DEBUG、RELEASE 两种版本。 • 编译:C\C++ -- .OBJ • .RC – .RES • 链接: .EXE

  30. 本章重点概念: 1.  消息(事件)驱动 2.  窗口类、窗口与窗口函数 3.  消息,消息循环与窗口函数

  31. 课堂练习 • 试述窗口、窗口类和窗口函数的功能及其间相互关系 • 试述WinMain函数和窗口函数各完成什么功能 • 试述消息队列、消息循环和窗口函数的功能及其间相互关系 • DefWindProc函数的功能,哪个消息不能缺省处理,如何处理。 • 如何设置窗口的位置和大小,改变光标形状和窗口背景颜色。 • 你对讲课内容或方式有什么问题和建议

More Related