一.  图标的设置

  1.   加载图标

       API函数:AfxGetApp()->LoadIconW();

2.  显示图标

      API函数:SetClassLong();

      函数原型:DWORD WINAPI SetClassLong(_In_ HWND hWnd,_In_ int nIndex,_In_ LONG dwNewLong);

      参数:

hWnd:窗口句柄及间接给出的窗口所属的类

一般可设置为m_hWnd

nlndex:指定将被替换的32位值。在额外类存储空间中设置32位值,应指定一个大于或等于0的偏移量。

有效值的范围从0到额外类的存储空间的字节数一4;

例如,若指定了12个字节或多于12个字节的额外类存储空间,则索引值为8时,对应的是第三个32位整数值。

如果要设置WNDCLASSEX结构中的任何值,需要指定下面索引之一:

GCL_CBCLSEXTRA:设置与类相关的尺寸的字节大小。设定该值不改变己分配的额外字节数。

GCL_CBWNDEXTRA:设置与类中的每一个窗口相关的尺寸的字节大小。设定该值不改变已分配额外字节数。查看如何进入该内存,参看SetWindowLOng。

GCL_HBRBACKGROUND:替换与类有关的背景刷子的句柄。

GCL_HCURSOR:替换与类有关的光标的句柄。GCL_HICON:替换与类有关的图标的句柄。

GCL_HMODULE:替换注册类的模块的句柄。GCL_STYLE:替换窗口类的风格位。

GCL_MENUNAME :替换菜单名字符串的地址。该字符串标识与类有关的菜单资源。

GCL_WNDPROC :替换与窗口类有关的窗口过程的地址。

dwNewLong:指定的替换值。

返回值:

返回值的类型:DWORD

如果函数成功,返回值是原来类结构中32位整数;如果没有初始化,返回值为0。如果函数失败,返回值也为0。若想获得更多错误信息,请调用GetLastError函数。

二. 位图设置

 1.  加载位图

    API函数:LoadBitmap();

2.  显示位图

    获取位图像素:GetBitmap();

    设置位图:SetBitmap();

三.  可以设置宏通过相对路径加载Bitmap和Icon

    1.  通过相对路径获取Bitmap句柄,同时可以设置位图的长和宽

    #define HBMP(filepath,width,hight) (HBITMAP)LoadImage(AfxGetInstanceHandle(), filepath,IMAGE_BITMAP, width, hight,LR_LOADFROMFILE|LR_CREATEDIBSECTION)

    2.  通过相对路径获取Icon句柄,显示默认大小

     #define ICON(filepath) (HICON)LoadImage(AfxGetInstanceHandle(),filepath,IMAGE_ICON,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE)

案例(当鼠标放到控件上,控件会随机移动)

  1.  新建一个MFC对话框RuningButton,在对话框中添加两个Button按钮,在解决方案管理器中->右击方案名->添加->类(MyButtom:基类为CButton)

  2.  给Button2添加一个控件变量(m_button:变量类型为MyButtom),使其与类MyButtom关联

  3.  给控件添加一个点击事件

 

  //头文件
#pragma once
#include <afxwin.h>
class MyButton :
public CButton
{
public:
MyButton();
~MyButton();
DECLARE_MESSAGE_MAP()
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
}; //cpp源文件
#include "stdafx.h"
#include "MyButton.h" MyButton::MyButton()
{
} MyButton::~MyButton()
{
}
BEGIN_MESSAGE_MAP(MyButton, CButton)
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP() void MyButton::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 int x = rand() % ;
int y = rand() % ; this->MoveWindow(x, y, , ); CButton::OnMouseMove(nFlags, point);
}

  4.  加载位图

 //RuningButtonDlg.h

 private:
MyButton m_button; //RuningButtonDlg.cpp BOOL CRuningButtonDlg::OnInitDialog()
{
CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 m_button.SetWindowTextW(TEXT("运动的按钮")); CBitmap bitmap;
bitmap.LoadBitmapW(IDB_BITMAP1); BITMAP bmp;
bitmap.GetBitmap(&bmp); /*m_button.SetBitmap(bitmap); m_button.MoveWindow(0, 0, bmp.bmWidth, bmp.bmHeight);*/ //通过相对路径加载位图
#define HBMP(filepath,width,hight) (HBITMAP)LoadImage(AfxGetInstanceHandle(), filepath,IMAGE_BITMAP, width, hight,LR_LOADFROMFILE|LR_CREATEDIBSECTION) m_button.SetBitmap(HBMP(TEXT("../32604.bmp"), , ));
m_button.MoveWindow(, , , ); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}

  5.  运行效果

MFC:位图和图标的设置的更多相关文章

  1. MFC 使用位图按钮,并且设置按钮的鼠标悬停效果

    系统环境:Windows 10软件环境:Visual C++ 2013 SP1本次目的:使用位图按钮,并且设置按钮的鼠标悬停效果 在用MFC开发时,界面是比较不好开发的一块.VC中自带了CBitmap ...

  2. C#项目打包后安装的桌面快捷方式图标怎么设置成自己想要的图标

    #项目打包后安装的桌面快捷方式图标怎么设置成自己想要的图标 2012-08-25 09:11匿名 | 浏览 3286 次  C#编程 C#项目用vs2005自带的工具打包后安装的桌面快捷方式图标怎么设 ...

  3. ffdshow 源代码分析 3: 位图覆盖滤镜(设置部分Settings)

    ===================================================== ffdshow源代码分析系列文章列表: ffdshow 源代码分析 1: 整体结构 ffds ...

  4. 修改tomcat小猫图标,设置项目的favicon图标

    修改tomcat小猫图标,设置项目的favicon图标,方式有两种:全局方式和局部方式 1.全局方式: 进入tomcat服务器\webapps\ROOT,然后用自己项目的favicon.ico替换to ...

  5. MFC更换窗口图标

      https://blog.csdn.net/deep_kang/article/details/72722692: MFC更换图标,图像默认为MFC,主要步骤有三步. 第一步 找到一张图片(坑点: ...

  6. MFC修改窗口图标

    Visual Studio写MFC应用程序,默认的程序左上角图标是自带的(如下图),想要自己个性化定制一个新的图标则需要以下几个步骤. 一.准备工作(icon图标) 首先准备一个自己个性化定制的图片, ...

  7. iOS之APP应用图标的设置

    图标是IOS程序包所必需的组成部分.如果你没有提供程序所需的各种尺寸的图标,程序上传发布时可能会无法通过验证.IOS程序为兼顾不同的应用场景,定义了多个不同规格的图标,并以不同的命名区分: IOS图标 ...

  8. java 24 - 9 GUI 之 给窗体换图标、设置启动在屏幕中间、更换皮肤

    A.首先更改窗体左上角的图片 步骤一: 创建3个包,分别建立1个类 第一个是窗体的包,窗体类:设置窗体的主要布置和功能 第二个是资源包,图片:把想要改的图案拉进来 第三个是UI界面包,UI界面设计类: ...

  9. cordova启动页面和图标的设置

    一.config.xml配置 在cordova5.0版本以后,需要安装cordova-plugin-splashscreen插件以后才能修改和设置App的启动页面. 安装splashscreen插件: ...

随机推荐

  1. 原生 table css实现操作按钮固定右侧及底部滚动 IE不会卡死

    需求的表格比较复杂(各种合并新增删除),elementUi的table组件无法满足需求,故而写了原生table,且与其他用了table组件的表格保持一致. 贴一下简单的代码,只实现操作按钮固定右侧以及 ...

  2. 【设计模式】简单工厂模式 Simple Factory Pattern

    简单工厂模式Simple Factory Pattern[Simple Factory Pattern]是设计模式里最简单的一个模式,又叫静态工厂模式[Static Factory Pattern], ...

  3. Kafka单节点及集群配置安装

    一.单节点 1.上传Kafka安装包到Linux系统[当前为Centos7]. 2.解压,配置conf/server.property. 2.1配置broker.id 2.2配置log.dirs 2. ...

  4. 使用pyton在本地指定目录模拟服务器

    1.cd 到指定目录 2.运行命令 python 3之前 python -m SimpleHTTPServer & python 3+ python -m http.server & ...

  5. 从0开始的Python学习015输入与输出

    简介 在之前的编程中,我们的信息打印,数据的展示都是在控制台(命令行)直接输出的,信息都是一次性的没有办法复用和保存以便下次查看,今天我们将学习Python的输入输出,解决以上问题. 复习 得到输入用 ...

  6. MySQL8.0 on Windows下重置root密码的BUG

    很多人都知道MySQL忘记root密码之后可以通过skip-grant-tables来暂时免密登录MySQL,从而修改root密码,但是这种方式一方面有安全隐患,另一方面也并不怎么适用于Windows ...

  7. RobotFramework第二篇之web自动化

    (1)安装seleniumLibrary库: pip install --upgrade --pre robotframework-seleniumlibrary 使用第三方库关键字: (1)sett ...

  8. SQL 行转列的运用

    适用场景:需要将行数据转换成列数据 例子: 现在有一个学生的成绩表 但是我们需要将每个学生的成绩汇集到一条数据上,这时候就可以用到行转列. 代码如下 一.不使用  PIVOT SELECT ),[St ...

  9. 逆向-攻防世界-CSAW2013Reversing2

    运行程序乱码,OD载入搜索字符串,断电到弹窗Flag附近. 发现跳过00B61000函数,弹窗乱码,我们试试调用00B61000函数.将00B61094的指令修改为JE SHORT 00B6109b. ...

  10. 《JavaScript设计模式与开发实践》笔记第八章 发布-订阅模式

    第八章 发布-订阅模式 发布-订阅模式描述 发布-订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知. 发布-订阅模式可以广泛应用于 ...