关闭

Windows编程基础--第2节 win32程序资源管理

标签: win32windows
2055人阅读 评论(0) 收藏 举报
分类:

(操作系统:win10 64位 IDE:vc++ 6.0)
windows程序都有自己的资源,例如按钮,图标,对话框等等,这节介绍如何使用win32程序资源管理;
1、继续使用上节的win32程序demo,执行File->new添加资源,选择Files选项卡中的Resource Script,填写资源名,如图所示:
这里写图片描述
2、此时项目左侧会出现ResourceView视图,单击ResourceView中的根节点+号,会提示“This file is already open in an editor”,这时候关闭右边的day01.rc,再次打开就可以了;
这里写图片描述
3、在ResourceView节点day01 Resources节点上右击->Insert,选中Dialog
,单击“New”,创建一个对话框资源,创建成功之后如图:
这里写图片描述
4、在新建的对话框上右击选择属性(Properties),会弹出dialog的属性窗口,可以设置一些对话框的相关属性,如图
这里写图片描述
5、接下来我们做一个简单的BMI计算器(体重指数BMI=体重/身高的平方(国际单位kg/㎡)),拖动三个Edit分别用来显示身高,体重,BMI值,并设置属性ID,分别为:IDC_EDIT_SG、IDC_EDIT_TZ,IDC_EDIT_BMI,如图所示:
这里写图片描述
6、接下来切换到类视图(classView),双击WinMain入口函数,添加对话框语句:

DialogBox(hInstance,(LPCTSTR)IDD_DIALOG_BMI,NULL,DlGFUNC);

其中IDD_DIALOG_BMI为刚才添加的对话框属性ID,DlGFUNC为对话框的消息处理函数,
7、接下来我们添加DlGFUNC函数,如下:

BOOL CALLBACK DlGFUNC(HWND hwnd_dlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_COMMAND:
        switch(wParam)
        {
        case IDCANCEL:
            EndDialog(hwnd_dlg,IDCANCEL);
            break;
        case IDOK:
            {
                int nHeight= GetDlgItemInt(hwnd_dlg,IDC_EDIT_SG,NULL,TRUE);
                double dHeight = nHeight / 100.00;
                int nWeight = GetDlgItemInt(hwnd_dlg,IDC_EDIT_TZ,NULL,TRUE);
                double bmi = nWeight/(dHeight*dHeight);
                char buf[28];
                sprintf(buf, "%.3f", bmi);
                SetDlgItemText(hwnd_dlg,IDC_EDIT_BMI,buf);
            }
            break;
        }
        break;
    }
    return FALSE;
}

其中IDOK,和IDCANCEL为对话框确认按钮和取消按钮所触发消息,IDCANCEL关闭对话框,IDOK消息我们来获取身高和体重Edit中的值,并按照公式体重指数BMI=体重/身高的平方(国际单位kg/㎡)计算BMI,最后将BMI值设置到BMI Edit中:

                int nHeight= GetDlgItemInt(hwnd_dlg,IDC_EDIT_SG,NULL,TRUE);
                double dHeight = nHeight / 100.00;
                int nWeight = GetDlgItemInt(hwnd_dlg,IDC_EDIT_TZ,NULL,TRUE);
                double bmi = nWeight/(dHeight*dHeight);
                char buf[28];
                sprintf(buf, "%.3f", bmi);
                SetDlgItemText(hwnd_dlg,IDC_EDIT_BMI,buf);

注意:要在文件头部引用资源头文件:#include “resource.h”
最终效果如下:
这里写图片描述
附day01.cpp源码:

// day01.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "resource.h"
#include "stdio.h"


BOOL CALLBACK DlGFUNC(HWND hwnd_dlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_COMMAND:
        switch(wParam)
        {
        case IDCANCEL:
            EndDialog(hwnd_dlg,IDCANCEL);
            break;
        case IDOK:
            {
                int nHeight= GetDlgItemInt(hwnd_dlg,IDC_EDIT_SG,NULL,TRUE);
                double dHeight = nHeight / 100.00;
                int nWeight = GetDlgItemInt(hwnd_dlg,IDC_EDIT_TZ,NULL,TRUE);
                double bmi = nWeight/(dHeight*dHeight);
                char buf[28];
                sprintf(buf, "%.3f", bmi);
                SetDlgItemText(hwnd_dlg,IDC_EDIT_BMI,buf);
            }
            break;
        }
        break;
    }
    return FALSE;
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    // TODO: Place code here.
    DialogBox(hInstance,(LPCTSTR)IDD_DIALOG_BMI,NULL,DlGFUNC);

    return 0;
}

后记:
DialogProc是一个窗口过程函数。该函数为一个应用程序定义可与DialogBox函数一起使用的回调函数。它处理发送到一个模态的或无模式对话框的消息。DLGPROC类型定义了一个指向此回调函数的指针。DialogProc函数是应用程序定义函数名的一个占位符。
函数原型:

BOOL CALLBACK DialogProc(
HWND hwndDlg,
UINT UMsg,
WPARAM wParam,
LPARAM lParam
);

hwndDlg
指定对话框。
uMsg
指定消息。
wParam
指定消息特定的其他信息。
Iparam
指定消息特定的其他信息。

项目源码可以访问我的码云来fork:

https://gitee.com/AmuUncle/MFC_CSDN.git
0
0
查看评论

利用纯汇编写一个WIN32的窗口程序

;ml /coff demo.asm /link /subsystem:windows /entry:main user32.lib kernel32.lib .486 .model flat,stdcall option casemap:none ; 函数原型声明 MessageBoxA ...
  • cosmoslife
  • cosmoslife
  • 2016-07-08 17:17
  • 912

win32窗口程序的详细注释

// win32project.cpp : Defines the entry point for the application. // #include "stdafx.h" #include "win32project.h" #define MAX_...
  • jkhere
  • jkhere
  • 2013-06-17 16:26
  • 1326

qt快速入门简介

 内容1来源:http://c.biancheng.net/cpp/qt/文章列表:Qt简介Qt的下载和安装使用C++来创建界面使用Qt Designer使用QML来创建界面使用C++还是QMLQt的渲染机制以及控件绘制方式分析第一个Qt程序代码Qt窗口之QMainWindow、QDialog...
  • JoysonQin
  • JoysonQin
  • 2017-03-28 11:22
  • 293

Windows程序设计(1)——Win32运行原理(三)

进程控制 1 获得系统进程 4 进程控制 4.1 获得系统进程 使用toolhelp模块可以实现获取系统中当前运行当中的进程列表。 思路如下,使用CreateToolhelp32Snapshot函数给当前系统内执行的进程拍快照(Snapshot),也就是获得了进程列表,这个列...
  • himayan46
  • himayan46
  • 2016-08-04 23:40
  • 750

win32实现画图小程序

本周我们的三级项目是用win32完成一个画图软件。今天我们也进行一个总结。如果大家觉得下面表述不清,想直接看代码,可以到我的资源页下载源代码:http://download.csdn.net/download/mr_zhaoz/9849315。 该画图软件要求实现功能:颜色选择、工具选择、画笔宽度...
  • Mr_zhaoz
  • Mr_zhaoz
  • 2017-05-22 21:04
  • 1015

windows基础编程 -- 资源

前言VC环境可以通过资源脚本文件(.rc)给当前程序添加资源,这些资源包括: Accelerator(加速键),Bitmap(位图),Cursor(光标),Dialog(对话框),HTML(网页脚本),Icon(图标),Menu(菜单),StringTable(字符表),ToolBar(工具栏),V...
  • diletrich
  • diletrich
  • 2016-02-18 23:17
  • 341

具体数学 计算机科学基础(第2版).pdf 免费下载

下载地址: 具体数学 计算机科学基础(第2版).pdf
  • jiongyi1
  • jiongyi1
  • 2018-01-21 11:47
  • 182

windows机制下的游戏编程实例二

通过调用DirectX SDK库实现游戏空间的三维化,也就是我们通常玩的网友,鼠标拖着主角到处跑去完成任务(个人觉得这种游戏超无聊)。下面先给出效果图: 还是先给出其文件目录吧,从总体把握实例,也是很重要的! 主要代码如下://-----------------------------...
  • chongshangyunxiao321
  • chongshangyunxiao321
  • 2016-04-18 21:41
  • 1202

Windows编程基础学习笔记

Windows编程概述     Windows系统是一个消息驱动的操作系统,每一个事件的发生都会产生一个消息,我们通过消息来知道发生了什么事件。    Windows编程是在实现程序算法的基础上进行窗口编程。程序员可以直接调用Windows API进...
  • lindagod
  • lindagod
  • 2015-02-17 08:28
  • 3119

Windows编程基础--第3节 初探MFC

前言 win32程序属于早期windows软件,已经逐渐被淘汰,但它的设计模式和方法大部分都被MFC所继承,并且MFC开始使用C++语言进行开发,借助C++比C语言的强大特性,使得开发windws程序更加简便、高效,更加多元化。 创建第一个MFC程序(操作系统:win10 64位 IDE:vc+...
  • qq_25549309
  • qq_25549309
  • 2017-10-19 22:17
  • 1883
    个人资料
    • 访问:40790次
    • 积分:698
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:6篇
    • 译文:0篇
    • 评论:1条
    文章分类