首页 > 其他分享 >《MFC篇》悬浮button

《MFC篇》悬浮button

时间:2023-08-01 11:12:54浏览次数:32  
标签:控件 外观 MFC 对话框 悬浮 button lpDrawItemStruct 按钮

要在MFC中设置悬浮按钮,你可以按照以下步骤进行操作:

  1. 首先,在你的对话框资源中创建一个普通的按钮控件,将其属性中的"Flat"设置为True,这将使按钮显示为一个扁平化的样式。

  2. 在你的对话框类中添加按钮控件的成员变量。你可以使用类向导或手动添加。

  3. 在对话框的OnInitDialog函数中,使用ModifyStyle函数为按钮控件添加BS_OWNERDRAW样式。这将使按钮自定义绘制。

  4. 在对话框类中重写按钮控件的DrawItem函数。在这个函数中,你可以自定义按钮的外观。例如,当鼠标悬浮在按钮上时,你可以改变按钮的背景颜色、文本颜色等。

代码

void CYourDialog::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
	CDC dc;
	dc.Attach(lpDrawItemStruct->hDC);
	CRect rect(lpDrawItemStruct->rcItem);

	// 根据按钮状态绘制按钮外观
	if(lpDrawItemStruct->itemState & ODS_SELECTED)
	{
		// 按钮被按下
		// 绘制按钮按下状态的外观
	}
	else if(lpDrawItemStruct->itemState & ODS_DISABLED)
	{
		// 按钮被禁用
		// 绘制按钮禁用状态的外观
	}
	else
	{
		// 按钮正常状态
		// 绘制按钮正常状态的外观
		// 当鼠标悬浮在按钮上时,你可以改变按钮的背景颜色、文本颜色等
	}

	dc.Detach();
}

你可以根据需要自定义按钮的外观。

  1. 在对话框类中重写按钮控件的PreTranslateMessage函数。在这个函数中,你可以检测鼠标是否悬浮在按钮上,并执行相应的操作。

代码

BOOL CYourDialog::PreTranslateMessage(MSG* pMsg)
{
	// 获取鼠标坐标
	CPoint point;
	GetCursorPos(&point);
	ScreenToClient(&point);

	// 检测鼠标是否在按钮区域内
	if(m_btnYourButton.GetSafeHwnd() && m_btnYourButton.GetClientRect().PtInRect(point))
	{
		// 执行鼠标悬浮时的操作
		// 例如改变按钮的外观、显示提示文本等
	}

	return CDialog::PreTranslateMessage(pMsg);
}

你可以根据需要执行鼠标悬浮时的操作,例如改变按钮的外观、显示提示文本等。

通过以上步骤,你就可以在MFC中设置悬浮按钮了。记得在对话框类的头文件中声明按钮控件的成员变量,并在对话框类的实现文件中进行初始化和消息处理。希望对你有所帮助!

标签:控件,外观,MFC,对话框,悬浮,button,lpDrawItemStruct,按钮
From: https://www.cnblogs.com/fusio/p/17595941.html

相关文章

  • 微信小程序 button 等组件单击动态传递参数
    首先在小程序端,加入一个data-*的参数,‘*’需要是小写,若写成大写会被转换为小写,支持‘-’号,如<buttonbindtap="button-click"data-abc="{{value}}"></button>然后在js文件中实现‘click’方法,通过event.currentTarget.dataset.*获取在小程序端写的值button-click:function(e......
  • 官网解决-找不到mfc140u.dll,无法继续执行代码
    问题:找不到mfc140u.dll,无法继续执行代码原因:一般都是电脑缺少或丢失了dll,或者没安装对应版本的vc运行库解决:直接去官网下载vc运行库,安装即可直接上Microsoft官网链接:https://answers.microsoft.com/zh-hans/windows/forum/all/%E5%BE%AE%E8%BD%AF%E5%B8%B8%E7%94%A8%E8%BF%90......
  • 【MFC】CSingleLock的使用
    转载文章:CSingleLock的使用//先看看其代码://声明classCSingleLock{//Constructorspublic:CSingleLock(CSyncObject*pObject,BOOLbInitialLock=FALSE);//Operationspublic:BOOLLock(DWORDdwTimeOut=INFINITE);BOOLUnlock(......
  • DevExpress 按钮列点击多次才出发ButtonClick事件
    解决多次点击才能出现拉框,解决方法把GridView的EditorShowMode的模式选择了Click,应改为MouseDown就好了。图示位置: ......
  • MFC-文件操作CFile
             ......
  • 《Win32篇》空项目、Win32项目、MFC项目、Win32控制台的区别
    空项目、Win32项目、MFC项目、Win32控制台的区别参考链接:https://www.cnblogs.com/MCSFX/p/13267287.html参考链接:https://www.zhihu.com/question/20524989/answer/17575697空项目控制台控制台没有窗口,控制台与有窗口的(例如:win32、mfc)交互方式不同,前者是CML(命令模式),后者是G......
  • MFC-realloc修改数组容量
     TCHAR*p,*q;//分配初始内存空间p=(TCHAR*)malloc(10*sizeof(TCHAR));//初始化p中的数据for(inti=0;i<9;i++){*(p+i)=_T('a');}*(p+9)=_T('\0');//扩容pq=(TCHAR*)realloc......
  • 《MFC篇》MFC文件结构
    MFC文件结构(VS2015为例)原文链接:https://blog.csdn.net/fuhanghang/article/details/109826297在VS2015中创建完项目之后,会自动生成下面的文件结构:包括引用、外部依赖、头文件、源文件、资源文件、ReadMe。下面对这些文件进行分类描述:1、和项目名称相同的有两个文件比如说我......
  • MFC-MessageBeep播放系统定义的波形声音
     MessageBeep(MB_ICONEXCLAMATION);//播放系统定义的波形声音/*-1从机器的扬声器中发出蜂鸣声MB_ICONASTERISK播放由SystemAsterisk定义的声音MB_ICONEXCLAMATION播放由SystemExclamation定义的声音MB_ICONHAN......
  • Element-ui源码解析(二):最简单的组件Button
    好家伙,为了有足够的能力去开发组件,先研究一下别人的组件开始抄袭模仿我们的行业标杆element-ui 找到Button组件的源码 只有三个文件,看上去非常易读,开搞  其中最重要的部分,自然是button.vue<template><buttonclass="el-button"@click="handl......