MFC中常见控件的操作
1、下面的代码用于获取屏幕的长度和宽度
int iWidth = GetSystemMetrics(SM_CXSCREEN); //
int iHeight = GetSystemMetrics(SM_CYSCREEN);
::InvalidateRect(NULL,&CRect(0,0,iWidth,iHeight),FALSE);//重绘该区域
2、下面的代码用于设置控件的默认值(单选框和编辑框)
m_DelayTest.SetCheck(1);
SetDlgItemText(IDC_EDT_TEST_TIME_INTERVAL,_T("16"));
3、下面的代码用于获取编辑框中的内容
CString csValue;
GetDlgItemText(IDC_EDT_TEST_TIME_INTERVAL,csValue);
m_MaxInterval = _ttoi(csValue.GetBuffer());
4、通过控件ID设置控件显示的文字
GetDlgItem(IDC_MSG)->SetWindowText(_T("配置信息已经保存,注意:需重新启动AirMove配置才能生效。。。。。。"));
5、通过控件ID让指定控件(窗口)有效或失效
GetDlgItem(IDC_BTN_VIDEO_CAP)->EnableWindow(false);//失效
GetDlgItem(IDC_BTN_VIDEO_CAP)->EnableWindow(true);//生效
6、让窗口中绘制的某个图形移动
方法1、在原图形位置使用背景色画一遍,然后再在新位置把图形画出来,这种方式适合背景色单一,且已经知道背景色的情况。
方法2、让窗口重绘,然后再把图形绘制出来,简单的示例代码如下:
bool CBullet::DrawCur(bool bClear)
{
if (NULL == m_pDC || NULL == m_MainHwnd)
return false;
double dLeftTopX = m_curPos.x - m_iLen , dLeftTopY = m_curPos.y - m_iLen;
double dBottomRightX = m_curPos.x + m_iLen, dBottomRightY = m_curPos.y +m_iLen;
if (bClear)
{
InvalidateRect(m_MainHwnd,CRect(dLeftTopX-1, dLeftTopY-1, dBottomRightX+1 , dBottomRightY+1),true);
UpdateWindow(m_MainHwnd);
}
else
{
CPen* pOldPen = NULL;
CPen LinePen(PS_SOLID,2, 0xFF0000);
pOldPen = m_pDC->SelectObject(&LinePen);
m_pDC->Ellipse(CRect(dLeftTopX, dLeftTopY, dBottomRightX , dBottomRightY));
m_pDC->SelectObject(pOldPen);
}
return true;
}
只需要连续两次调用该函数,先传参数为true,后传入参数为false即可实现小圆圈的移动。
7、在控件上面加载并显示位图
m_test_bmp.Detach();
m_test_bmp.LoadBitmap(IDB_BITMAP_GUN);
m_test_Static2.SetBitmap(m_test_bmp);
其中:
m_test_bmp为一个位图类的对象,定义形式为:CBitmap m_test_bmp;
m_test_Static2为一个静态文本控件,定义形式为CStatic m_test_Static2;在使用时可以根据需要改为button之类的控件。
8、为组合框下拉框动态添加字符串,需要先为组合框增加一个对应的变量
m_ComBoxLogLevel.ResetContent();
m_ComBoxLogLevel.AddString(_T("OFF"));
m_ComBoxLogLevel.AddString(_T("MIN"));
m_ComBoxLogLevel.AddString(_T("MID"));
m_ComBoxLogLevel.AddString(_T("MAX"));
9、动态创建一个static控件
(1)先定义一个CStatic的指针,例如:
CStatic* pStatic1;
(2)为指针new一个CStatic对象,并创建和显示它,
pStatic1 = new CStatic();
pStatic1->Create(_T("dynamic"),
WS_CHILD|WS_VISIBLE|SS_CENTER|SS_NOTIFY,
CRect(10,10,150,50),
this,
65520);
pStatic1->ShowWindow(true);
(3)千万别忘了delete掉new生成的对象
delete pStatic1;
10、在MFC的窗口上加载jpg图片
(1)包含头文件
#include <atlimage.h>
(2)定义CImage对象和DC指针,前者用于管理图片,后者指向显示的窗口的DC
CImage m_Image;
CDC* m_pDrawDC;
//获取当前窗口的DC
if (NULL == m_pDrawDC)
m_pDrawDC = this->GetDC();
需要注意:m_pDrawDC使用完之后需调用ReleaseDC释放:
if (NULL != m_pDrawDC)
{
ReleaseDC(m_pDrawDC);
m_pDrawDC = NULL;
}
(3)加载并显示一副jpg图片:
m_Image.Destroy();
_ChangeCurPicIndex(0);
stringstream sstr;
sstr<<m_pCfgInfo->pathName<<"\\"<<m_iCurPicIndex<<".jpg";
string sFileName = sstr.str();
HRESULT hResult;
hResult = m_Image.Load(sFileName.c_str());
if (FAILED(hResult))
{
_OutputLog("fail,Load picture:"+sFileName);
return false;
}
if (!m_Image.IsNull())
m_Image.Draw( m_pDrawDC-> m_hDC,0,0);
(4)防止图片缩放时失真
可在初始化化时加如下代码:
m_pDrawDC->SetStretchBltMode(HALFTONE);//防止图片缩放时失真
11、播放MP3
12、改变对话框的背景颜色,只需在该对话框的OnCtlColor函数(消息WM_CTLCOLOR)中提前返回自己定义的颜色即可:
HBRUSH CSuperPlayerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何属性
m_DlgBKBrush.CreateSolidBrush(RGB(64,64,255)); //初始化窗口背景颜色为蓝色
return m_DlgBKBrush;//定义自己的背景颜色
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}
13、Timer
(1)包含头文件:
#include <windows.h>
(2)定义一个Timer的ID:
#define TIMDER_SCREENSAVER_ID 1000
(3)设置该ID的Timer,一般在初始化函数中设置:
SetTimer(TIMDER_SCREENSAVER_ID, 100, NULL);
(4) 添加对话框对消息WM_TIMER的OnTimer函数,在该函数里面响应所有的定时间消息,因此可以在这里根据定时器的ID进行判断和响应
void CDlgScreenSaver::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (TIMDER_SCREENSAVER_ID == nIDEvent)
_Play();
CDialog::OnTimer(nIDEvent);
}
MFC中常见控件的操作相关推荐
- MFC中Listbox控件的简单使用
MFC中listbox控件是为了显示一系列的文本,每个文本占一行. Listbox控件可以设置属性为: LBS_CHILD :(默认)子窗口 LBS_Visible :(默认)可视 LBS_Mul ...
- MFC中的控件是怎么实现的呢?一个按钮就是一个窗口?还是所有按钮画在一个分层窗口上再叠
请教一下MFC中的控件是怎么实现的呢(通过调用什么样的API,传递什么参数)?一个按钮就是一个窗口?还是所有按钮画在一个分层窗口上再叠在主窗口上?还是直接在主窗口上画图? 我想到的是: JavaScr ...
- MFC中picture控件如何响应鼠标移动?
MFC中picture控件如何响应鼠标移动? 2011-08-21 21:23 轻若惊鸿 | 浏览 3354 次 硬件网络 我将一个picture控件的属性中的Notify勾上了,但是只能响应鼠标按键 ...
- (VC2005)MFC中添加控件的成员变量.
VC 2005 中添加控件的成员变量. 方法一:使用变量添加向导. 右击控件->Add Variable (打开了 Add Member Variable Wizard) -> 输入Va ...
- MFC中CStatic控件动态改变
我现在需要一个静态控件,当鼠标放上去时字体与颜色都要改变,当鼠标离开时在变回来. 现在可以改变字体,但是改变字的颜色还不行.我去网上搜了一下,两种方法,一个在父窗口中相应onctlcolor消息,但是 ...
- MFC中CSTATIC控件双击全屏/双击恢复
双击全屏方法有两种 1.双击放大的时候调static控件的父句柄SerParent让控件的父句柄变成桌面,然后再提取桌面的分辨率用movewindow或者setwindowpos改变控件大小.恢复成原 ...
- qt中提升控件的操作
我的代码里面自己写了一个类myview,继承自QGraphicsView,然后就把拖到界面上的QGraphicsView控件通过提升控件的方式替换成自己的myview类. 先在工具栏拖一个QGraph ...
- 关于错误码0x80040154 MFC中ACtiveX控件没有注册的正确解决方案
今天遇到一个问题,以前VC++6.0做好的工程文件在另一台电脑上无法运行,并且报错, CoCreateInstance of OLE control {67397AA3-7FB1-11D0-B148- ...
- MFC中树形控件的应用——电话簿
一.电话薄的代码如下: 1. // PhoneDlg.cpp : implementation file //#include "stdafx.h" #include " ...
最新文章
- html引入php文件中的函数,在b2core框架和simple_html_dom.php文件里面都有一个load()函数...
- Quartz教程三:Job与JobDetail介绍
- 为什么DevOps的必然趋势是BizDevOps
- html有4个li怎么选择第二个,如何在html中使用两个具有不同属性的Li?
- 慢日志定位到备份锁表Waiting for global read lock原因
- [note]标点符号和数学符号所对应的英文
- c语言encoder作业字符数组,C语言练习题库----数组
- web请求报出 “超过了最大请求长度”
- 10个互联网兼职平台,让你的一技之长变现,副业薪资比日常搬砖高也太爽了
- Swift游戏实战-跑酷熊猫 10 视差滚动背景
- DASCTF X GFCTF 2022十月挑战赛 WriteUp
- 【EXLIBRIS】名副其实
- [附源码]计算机毕业设计JAVAst音乐网站
- 几步操作即可实现WhatsApp群发
- Apache Hudi的编译及安装
- 奥维 最新 图源2023
- 基础、开发者、智能合约……统统都是矩阵元未来的关键词
- 在matlab中使用spm8,spm8处理流程.doc
- 跨越财富鸿沟:技术写作带来的无限可能 —— 怎样通过技术写作实现财富自由?
- python mathjax_MathJax: 让前端支持数学公式
热门文章
- python项目总结与展望_我做知识星球一周年总结与未来展望
- Fedora32升级Fedora33后无线网络无法连接的问题
- note_maven的基本使用
- 初始化_Linux的内存初始化
- php自学建议_如何高效自学PHP?
- python求数字平均值_Python简单计算数组元素平均值的方法示例
- Java基础04 编译与反编译
- php $key{$x},Thinkphp 3.x key可控注入(?)
- Python 柱状图 横坐标 名字_Python气象绘图教程(四)
- 实体 联系 模型mysql_数据库实体联系模型与关系模型