windows资源文件(.rc)是如何变成窗口控件的

本文介绍了如何使用Visual C++的资源文件创建对话框、菜单和控件,以简化Win32 SDK编程。通过资源描述文件(rc),系统会根据参数创建窗口和控件,并使用控件ID来标识和交互。GetDlgItem和DialogProc等API用于通过控件ID获取句柄,从而实现与控件的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在Visual C++使用资源来创建对话框,菜单,以及一些自定义控件,实际是为了减少基于Win32 SDK编程开发人员在编写Application时创建大量窗口,和控件(实际上也是窗口)的痛苦(大量使用CreateWindow,还要设置其中的参数,有些参数,初始化显示位置X, Y,窗口(或控件)的宽度和高度等,使用CreateWindow来设置非常不直观,只能凭经验来设置合理的位置和大小)。

    如下图所示,倘若我们用编程的方式来实现如下对话框,肯定是可以的但是太麻烦了,这个对话框有好多个控件和资源,如:菜单,组合框,文本输入框,按钮,同时还要设置这些控件自身的若干个性质,还有对话框本身的许多性质,非常麻烦,使用资源这一概念,则大大简化了我们的编程,我们可以使用,可视化的工具,来编辑这些窗口和控件。

/////////////////////////////////////////////////////////////////////////////

//

// Dialog

//

MYDIALOG DIALOG DISCARDABLE  0, 0, 200, 126

STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION "Dialog"

MENU IDM_MENU

FONT 10, "System"

BEGIN

    DEFPUSHBUTTON   "计算圆的面积",IDOK,133,56,57,14

在Visual C++ 6中创建一个Windows应用程序来显示一个灰色背景、居中文本和播放音乐的窗口,你可以按照以下步骤进行: 1. **创建新项目**: - 打开Visual Studio,选择“文件”->“新建”->“项目”,然后选择“MFC AppWizard (DLL)”或“MFC Win32 Application”。 2. **设计窗口界面**: - 在资源编辑器里,右键点击"资源视图"下的"窗体",选择"添加控件"。添加一个`Static Text`控件,设置其文字为“大家好,这是我的第一个Windows API程序!”并调整其位置到窗口正中央。 3. **设定窗口样式**: - 在`.rc`资源文件或`.cpp`代码中,通过`SetWindowLong()`函数改变窗口风格(例如,`WS_BORDER`去掉边框,`WS_POPUP`去掉最大化、最小化按钮,仅保留标题栏)。具体代码如下: ```cpp SetWindowLong(hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW & ~WS_MINIMIZEBOX & ~WS_MAXIMIZEBOX); ``` 4. **设置背景颜色**: - 使用`SetBackgroundMode()`函数将背景变为灰色,如: ```cpp HDC hdc = GetDC(hWnd); HBRUSH brush = CreateSolidBrush(RGB(128, 128, 128)); FillRect(hdc, NULL, brush); DeleteObject(brush); ReleaseDC(hWnd, hdc); ``` 5. **加载并播放音乐**: - 使用Windows多媒体API (`MMSystem`) 来加载音乐文件并播放,需要包含头文件`mmsystem.h`。示例代码: ```cpp MMRESULT result; result = PlaySound("music.wav", NULL, SND_FILENAME | SND_ASYNC); ``` 确保音乐文件已经放置在项目的正确路径下。 6. **改变鼠标指针形状**: - Windows API并不直接支持改变鼠标指针形状,但可以借助第三方库(如GDI+或WinAPI本身的一些技巧),这通常是在窗口捕获鼠标事件后操作鼠标的系统鼠标指针,比较复杂。 7. **运行程序**: - 确保上述所有操作都在`OnInitDialog`等合适的地方完成,然后双击工程图标或者按下F5运行程序。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值