- 浏览: 18977 次
-
最新评论
Windows SDK笔记-2
2011年04月25日
Windows SDK笔记(四):模式对话框[/b]
[b]一、概述
对话框是一种特殊的窗口,它依据对话框模板资源而建立。
它与一般的窗口有些不同,很多过程由系统完成了,虽然用户还是要提供一个消息处理函数,但在此消息处理函数中,不需要将不关心的消息交由缺省消息处理函数。
实际上,调用缺省处理的过程又系统完成。
[/b][b]二、对话框消息处理函数
对话框也需要用户提供一个消息处理函数,但这个处理函数没有普通窗口的消息处理函数"权利大"。
对话框是一种系统定义的“窗口类”,它已经定义好了对应的消息处理函数。客户所作的消息处理函数,并不是直接与窗口连接,而是对对话框消息处理函数的一种补充,或者说“嵌入”。
因此,对话框处理函数不需要调用“缺省消息处理函数”。
当有消息被处理时,返回TRUE,没有消息需要处理时,返回FALSE,此时退出用户消息处理函数后,系统会去调缺省消息处理函数。
//对话框消息处理函数
//返回值类型为BOOL,与普通窗口处理函数不同。
BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG :
return TRUE ; //返回真,表示消息被处理了。
case WM_COMMAND :
switch (LOWORD (wParam))
{
case IDOK :
case IDCANCEL :
EndDialog (hDlg, 0) ; //使用EndDialog关闭对话框
return TRUE ; //返回真,表示消息被处理了。
}
break ;
}
return FALSE ; ////返回假,表示消息未被用户处理,又缺省消息处理函数去处理。
}
[/b][b]三、模式对话框建立
使用DialogBox。
INT_PTR DialogBox(
HINSTANCE hInstance, // handle to module
LPCTSTR lpTemplate, // dialog box template
HWND hWndParent, // handle to owner window
DLGPROC lpDialogFunc // dialog box procedure
);
例:
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_ABOUT:
DialogBox (hinst, MAKEINTRESOURCE(IDD_ABOUT), hwnd, AboutDlgProc) ;
break;
}
return 0;
[/b][b]四、模式对话框与程序的交互
模式对话框中,可以对程序中的数据进行更改。
结束对话框时,在EndDialog第二个参数中传入退出参数
这个参数将被DialogBox作为返回值,然后对话框的用户根据此返回值作相应的操作。
1.初始化
对话框消息处理函数中,在接到WM_INITDIALOG消息时,作一些初始化工作。
如从全局变量读取初始值来设置各控件状态。
2.退出时
若退出时,更改需要生效,(如按了“确定”),则根据控件状态设置全局变量,并相应的在EndDialg中使用一个表示成功的值(如TRUE)。
若更改不需要生效(如按了“取消”),则不保存结果,并相应的在EndDialg中使用一个表示取消的值(如FALSE)。
3.对话框用户作出反应
根据DialogBox的返回值不同,而进行不同的操作
如,返回TRUE时,重绘窗口:
if (DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc))
InvalidateRect (hwnd, NULL, TRUE) ;
Windows SDK笔记(五):非模式对话框[/b]
[b]一、概述
使用DialgBox建立的对话框是“模式对话框”,只有关闭对话框后,程序的其他窗口才能进行操作。
与此相对应,存在“非模式对话框”,对话框建立后,并不强制要求用户立即反应,而是与其他窗口同时接受用户操作。
[/b][b]二、建立
非模式对话框使用CreateDialg建立。
可以在WinMain中建立主窗口后建立,对话框句柄保存备用。
hDlgModeless = CreateDialog (
hInstance,
TEXT ("ColorScrDlg"), //对话框模板
hwnd,
ColorScrDlg //对话框消息处理函数
);
[/b][b]三、消息循环添加针对非模式对话框的处理
“非模式对话框”与“模式对话框”不同,模式对话框工作的时候,有其内部的消息泵机制。
而非模式对话框则象普通窗口一样,由WinMain中书写的消息循环驱动。
但由于是对话框,它对一些消息有特殊的处理,例如用于在对话框中各子控件间导航的"TAB"键、"ENTER"键等等。
因此,在消息循环中,需要先给对话框提供截获消息的机会。
while (GetMessage (&msg, NULL, 0, 0))
{
if (hDlgModeless == 0 || !IsDialogMessage (hDlgModeless, &msg))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
}
如果当前取得的消息是对话框消息的话,IsDialgMessage将它交由对话消息处理函数处理,并返回TRUE。
不需要在派发了。
[/b][b]四、非模式对话框的销毁
使用:
DestroyWindow (hDlg);
用户关闭对话框时,对话框消息处理函数将收到WM_CLOSE消息,接到后调用DestroyWindow以销毁非模式对话框。
Windows SDK笔记(六):使用对话框资源建立窗口[/b]
[b]
[/b][b]一、概述
在Charles Petzold的书中,介绍了一种直接利用对话框资源建立主窗口的方法。
使用这种方法,可以方便的在主窗口中安排子控件,而代码的其他部分跟用普通窗口时一样。
我们知道,对话框是系统预先定义的“窗口类”,它有自己的窗口处理函数,我们自己写的对话框消息处理函数并不是真正的窗口消息处理函数。
但我们可以在对话框模板脚本中,指定这个对话框使用我们自己定义的窗口类,而不是系统的对话框类,这样,就将对话框的消息处理函数“嫁接”成我们自己定义的消息处理函数了。
[/b][b]二、书写一个“真正的”窗口消息处理函数
按照普通窗口的方式书写好消息处理函数。
(不要漏掉了DefWindowProc)
[/b][b]三、注册窗口类
用书写的消息处理函数注册一个窗口类。
[/b][b]四、建立对话框资源,指定窗口类为自定的窗口类。
手工书写一个对话框资源,存为单独文件,然后包含到资源文件中去。
(使用菜单View->Resource Includes弹出对话框,将文件名填入到Compile-time derective一栏,这将在rc文件中添加一行:"#include ""Some.dlg"" ")
例:
建立文件Some.dlg
书写:
HexCalc DIALOG -1, -1, 102, 122
STYLE WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
CLASS "HexCalc" //填写上自己注册的类名称
CAPTION "Hex Calculator"
{
PUSHBUTTON "D", 68, 8, 24, 14, 14
PUSHBUTTON "A", 65, 8, 40, 14, 14
//各种控件
}
[/b][b]五、使用非模式对话框方式建立主窗口
建立主窗口的时候,使用CreateDialog。
hwnd = CreateDialog (
hInstance,
szAppName, //对话框模板
0,
NULL) ;
ShowWindow (hwnd, iCmdShow) ;
其他各部分,都与普通窗口时相同(注册窗口类、消息循环等)。
Ⅱ.在对话框中建立自定义子窗口可以自己定义控件,然后在对话框模板中使用
[/b][b]一、定义"窗口类"与消息处理函数
在WinMain中
除了注册主窗口类外,
另外注册用于对话框的类,指明类对应的消息处理函数
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = SomeWndProc ; //对应的消息处理函数
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = NULL ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = TEXT ("SomeControl") ;
ReGISterClass (&wndclass) ;
同时,还要书写好消息处理函数SomeWndProc。
[/b][b]二、在对话框模板中添加自定义控件窗口
在对话框模板上放上"Custom Control",然后设置属性,并填写自己定义的类名称SomeControl。
发表评论
-
Windows PowerShell 2.0语言开发之脚本签名
2012-01-20 01:54 1074Windows PowerShell 2.0语言开 ... -
在Windows下安装Hadoop遇到的几个问题
2012-01-20 01:53 920在Windows下安装Hadoop遇到 ... -
1.7 --1.8 SDK-RMIOS
2012-01-20 01:53 13411.7 --1.8 SDK-RMIOS 2011年01月06 ... -
vs2008安装失败解决办法
2012-01-20 01:53 1192vs2008安装失败解决办法 2011年04月22日 由 ... -
Windows环境下设置Qt编译环境 - 关于Qt的静态链接库的配置和生成方法
2012-01-20 01:53 2305Windows环境下设置Qt编译环境 - 关于Qt的静态链接库 ... -
清晨随笔
2012-01-19 09:40 676清晨随笔 2011年12月28日 连做两个梦,都是关 ... -
这孩子,太有才了
2012-01-19 09:40 766这孩子,太有才了 19小时前 ... -
开心一笑
2012-01-19 09:40 587开心一笑 2010年01月15日 星期一到了……小英在交 ... -
一言既出,驷马难追
2012-01-19 09:40 643一言既出,驷马难追 2012年01月12日 ... -
Windows SDK
2012-01-17 02:15 975Windows SDK 2010年08月13日 微软每 ... -
Windows Phone 7 SDK 正式版本RTW
2012-01-17 02:15 864Windows Phone 7 SDK 正式版本RTW 20 ... -
Windows Phone 7 SDK
2012-01-17 02:15 924Windows Phone 7 SDK 2011年01月28 ... -
Ⅱ 留 拒绝酱油
2012-01-17 02:15 696Ⅱ ... -
C++加载位图和SOCKET通信的编写
2012-01-15 21:52 1427C++加载位图和SOCKET通信的编写 2010年06月02 ... -
C++ socket编程基础(理论篇)[转]
2012-01-15 21:52 776C++ socket编程基础(理论 ... -
C# Socket网络编程学习(1-->3)
2012-01-15 21:52 1415C# Socket网络编程学习(1-- ... -
C# Socket多线程编程实例
2012-01-15 21:52 818C# Socket多线程编程实例 ... -
java socket连接c/s (转)
2012-01-15 21:51 739java socket连接c/s (转) 2010年07月0 ...
相关推荐
### Windows SDK笔记详解 在本篇文章中,我们将深入探讨Windows SDK中的几个核心概念与实践技巧,包括窗口类的定义、窗口的创建、消息处理函数的编写以及消息循环的理解与实现。 #### 一、窗口类的定义 在Windows...
根据给定的信息,本文将详细解释“Windows SDK笔记(一):Windows程序基本结构”中的关键知识点,包括Windows程序的基本结构、如何使用Windows SDK编写简单的应用程序等。 ### Windows程序基本结构概述 Windows程序...
Windows SDK(Software Development Kit)即软件开发工具包,它提供了一套API(应用程序编程接口)供开发者使用,以便创建Windows应用程序。学习Windows SDK编程首先需要掌握基础的程序结构和函数调用方式。 #### 2...
### Windows Media Player SDK 学习笔记 #### 一、引言 Windows Media Player SDK 是一套由微软提供的开发工具,用于创建基于 Windows Media Player 的应用程序。它允许开发者利用 Windows Media Player 的强大...
4. **开发笔记**:《directshow_SDK开发笔记(翻译).pdf》很可能是对原版英文文档的详细翻译,涵盖了DirectShow SDK的使用方法、API调用、示例代码等内容。这些笔记对于初学者来说是宝贵的资源,它们通常会以更易于...
Intel Media SDK 环境搭建笔记 Intel Media SDK 环境搭建笔记为客户端搭建 Intel Media SDK 环境在 VS2015 中的详细步骤,包括环境配置、软件下载、源码解压缩、库文件编译和错误解决等。 环境配置 本机环境为 ...
0、网易云笔记,WPS,Github, Coding, ProcessOn,MindLine(付费),ShowDoc(即将弃用) 1、MarkdownPad 全能 Markdown 编辑器() 在Win10下会出现崩溃,为了修复此问题,需要下载Awesomium 1.6.6 SDK.()。具体方法大家可以...
- **VideoInfo2 Format Type**: VideoInfo2 格式的详细解析。 - **手动添加滤镜**: 如何手动添加滤镜到 Filter Graph,并正确地配置它们。 通过以上总结,可以清晰地了解到 DirectShow 的基础知识、核心概念、应用...
Windows Media Player SDK 是一个用于开发与Windows Media Player集成的应用程序的工具包,它允许程序员通过编程方式控制媒体播放器的各种功能。SDK 提供了丰富的属性、方法和事件,以便开发者能创建自定义的媒体...
Windows交叉编译工具链的Windows SDK...从17763.132.181022-1834.rs5_release_svc_prod1_WindowsSDK.iso提取。 笔记: 删除了对静态链接调试的支持,并发布了通用CRT库,因为它使SDK二进制文件的大小减少了50%以上。
DirectShow SDK 开发笔记主要涉及了使用DirectShow进行多媒体处理的相关知识。DirectShow是微软提供的一个用于Windows平台的流媒体处理开发工具包,通常与DirectX一同发布。它支持多种媒体格式,包括ASF、MPEG、AVI...
### DSHOW SDK 学习笔记知识点汇总 #### 绪言 - **DirectShow SDK简介**:DirectShow是Microsoft Windows操作系统中的一个组件,主要用于媒体文件的播放、捕获、压缩等功能。它采用一种灵活且可扩展的架构来处理...
gcc for arm 的版本需要和 nRF5_SDK_12.2.0_f012efa\components\toolchain\gcc\Makefile.windows 中的版本相符。MinGW 的安装需要点击链接下载安装,默认安装几个选项就可以了。 三、编译 micro-ecc 库文件 micro-...
### 新版Android开发教程&笔记三--环境搭建与解析 #### 一、Android开发环境概述 在本章节中,我们将详细介绍如何搭建一个完整的Android开发环境。对于初学者来说,掌握正确的环境搭建步骤至关重要,它不仅能帮助...
### DirectShow SDK 开发知识点详解 #### 一、DirectShow概览 DirectShow是微软推出的一款强大且灵活的媒体框架,旨在为Windows平台上的多媒体应用提供流媒体处理能力。它是DirectX开发包的一部分,主要专注于视频...
### DirectShow SDK 学习笔记知识点汇总 #### 一、DirectShow基础 **1.1 设置DSHOW的开发环境** DirectShow是Microsoft提供的一套多媒体框架,主要用于Windows平台上的音视频处理。为了能够进行DirectShow的开发...
### 52832 SDK15 DFU升级笔记 #### 概述 本文档旨在为使用nRF52832芯片进行安全固件升级(Secure DFU)的开发者提供一个详细的步骤指南。该指南基于nRF5_SDK_15.0.0_a53641a版本,适用于在Windows 7 64位操作系统...
iOS和Android提供了各自的SDK,用于处理这些触摸事件。 最后,跨平台的游戏开发需要注意不同平台的输入差异。例如,键盘布局、鼠标行为和游戏手柄的映射在不同系统间可能存在差异,需要适配处理。 通过以上介绍,...