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

标签: win32 windows
2103人阅读 评论(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
查看评论

windows程序设计——飞机大战笔记(解决输入混合密码账户,结局自动记录数据)

////////////////////2015/07/23/////////////////// ////////////////////by xbw///////////////////////...
  • xbw12138
  • xbw12138
  • 2015-07-23 16:15:27
  • 20323

win32编程键盘与鼠标

case WM_CHAR: switch(wParam) { case 'a': aa++; InvalidateRect(hWnd,NULL,TRUE);          ...
  • Calcular
  • Calcular
  • 2015-07-24 15:57:07
  • 837

一个使用纯Win32 SDK和C语言实现的五子棋游戏

GobangGame这是一个使用纯Win32 SDK和C语言实现的五子棋游戏在这个游戏中实现的功能 [x] 绘制一个15 * 15的棋盘 [x] 绘制5个着重点位置 [x] 根据鼠标左键的点击,可以绘...
  • u012814856
  • u012814856
  • 2017-03-13 00:03:43
  • 665

Windows编程基础--第8节 MFC对话框控件访问的七种方法(上)

MFC对话框控件具有以下三种访问方式(当然还有很多别的访问方式,今天时间紧急,先学这三种),分别是: 第一种 GetDlgItem()->GetWindowText() GetDl...
  • qq_25549309
  • qq_25549309
  • 2017-10-24 21:51:13
  • 2026

Windows编程基础 第七章 windows绘图 windows绘图设备

// windows09.cpp : 定义应用程序的入口点。 // #include "windows09.h" #include "stdafx.h" #include "resource.h" #...
  • yangxuefeng09
  • yangxuefeng09
  • 2014-09-04 14:59:10
  • 918

学好Windows编程要看的书籍

本文是接着前面的学好C++要阅读的书籍而写的,如果想了解C++的学习的话请先看学好C++要阅读的书籍:http://blog.csdn.net/a809146548/article/details/4...
  • swartz_lubel
  • swartz_lubel
  • 2017-03-10 18:24:15
  • 3344

Windows编程入门-WM_PAINT消息

WM_PAINT消息在Windows编程中极其重要。当窗口的客户区的部分或者全部“无效”且必须“更新”时,应用程序将得到此消息。这也就意味着窗口必须被“重绘”。 大多数Windows程序在Win M...
  • yyzh999
  • yyzh999
  • 2017-02-19 21:19:14
  • 235

Windows学习心得【模拟时钟】

#include #include #define ID_TIMER 1 #define TWOPI (2 * 3.14159) LRESULT CALLBACK WndPr...
  • u013517637
  • u013517637
  • 2014-04-16 22:59:04
  • 2130

Windows编程基础学习笔记

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

windows编程之位图

前言:本来今天想学着在VC++里插入图片的,结果这一弄就弄了一下午,终于有一点会了。这这是是一次艰难的学习经历。我看的是一本比较就的书《Visual C++ 面向对象与可视化程序设计》(第2版),下午...
  • u010084308
  • u010084308
  • 2013-12-10 18:03:30
  • 1159
    个人资料
    持之以恒
    等级:
    访问量: 4万+
    积分: 711
    排名: 7万+
    文章存档