注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

逍遥子 曰:

得失失得 何必患得患失 舍得得舍 不妨不舍不得

 
 
 

日志

 
 

MFC中常见控件的操作[原]  

2013-01-19 07:50:18|  分类: MFC |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1、下面的代码用于获取屏幕的长度和宽度 

  1. int iWidth = GetSystemMetrics(SM_CXSCREEN); //  
  2.  int iHeight = GetSystemMetrics(SM_CYSCREEN);   
  3.  ::InvalidateRect(NULL,&CRect(0,0,iWidth,iHeight),FALSE);//重绘该区域  

2、下面的代码用于设置控件的默认值(单选框和编辑框)

  1. m_DelayTest.SetCheck(1);  
  2. SetDlgItemText(IDC_EDT_TEST_TIME_INTERVAL,_T("16"));  
3、下面的代码用于获取编辑框中的内容
  1. CString csValue;  
  2. GetDlgItemText(IDC_EDT_TEST_TIME_INTERVAL,csValue);  
  3. m_MaxInterval = _ttoi(csValue.GetBuffer());  

4、通过控件ID设置控件显示的文字

  1. GetDlgItem(IDC_MSG)->SetWindowText(_T("配置信息已经保存,注意:需重新启动AirMove配置才能生效。。。。。。"));  
5、通过控件ID让指定控件(窗口)有效或失效

  1. GetDlgItem(IDC_BTN_VIDEO_CAP)->EnableWindow(false);//失效  
  2. GetDlgItem(IDC_BTN_VIDEO_CAP)->EnableWindow(true);//生效  

6、让窗口中绘制的某个图形移动

方法1、在原图形位置使用背景色画一遍,然后再在新位置把图形画出来,这种方式适合背景色单一,且已经知道背景色的情况。

方法2、让窗口重绘,然后再把图形绘制出来,简单的示例代码如下:

  1. bool CBullet::DrawCur(bool bClear)  
  2. {  
  3.     if (NULL == m_pDC || NULL == m_MainHwnd)  
  4.         return false;  
  5.       
  6.     double dLeftTopX = m_curPos.x - m_iLen , dLeftTopY = m_curPos.y - m_iLen;  
  7.     double dBottomRightX = m_curPos.x + m_iLen, dBottomRightY = m_curPos.y +m_iLen;  
  8.     if (bClear)  
  9.     {  
  10.         InvalidateRect(m_MainHwnd,CRect(dLeftTopX-1, dLeftTopY-1, dBottomRightX+1 , dBottomRightY+1),true);  
  11.         UpdateWindow(m_MainHwnd);  
  12.     }  
  13.     else  
  14.     {  
  15.         CPen* pOldPen = NULL;  
  16.         CPen LinePen(PS_SOLID,2, 0xFF0000);  
  17.         pOldPen = m_pDC->SelectObject(&LinePen);  
  18.         m_pDC->Ellipse(CRect(dLeftTopX, dLeftTopY, dBottomRightX , dBottomRightY));  
  19.         m_pDC->SelectObject(pOldPen);  
  20.     }  
  21.     return true;  
  22. }  
只需要连续两次调用该函数,先传参数为true,后传入参数为false即可实现小圆圈的移动。

7、在控件上面加载并显示位图

  1.        m_test_bmp.Detach();  
  2. m_test_bmp.LoadBitmap(IDB_BITMAP_GUN);  
  3. m_test_Static2.SetBitmap(m_test_bmp);  

其中:

m_test_bmp为一个位图类的对象,定义形式为:CBitmap m_test_bmp;

m_test_Static2为一个静态文本控件,定义形式为CStatic m_test_Static2;在使用时可以根据需要改为button之类的控件。

8、为组合框下拉框动态添加字符串,需要先为组合框增加一个对应的变量

  1. m_ComBoxLogLevel.ResetContent();  
  2. m_ComBoxLogLevel.AddString(_T("OFF"));  
  3. m_ComBoxLogLevel.AddString(_T("MIN"));  
  4. m_ComBoxLogLevel.AddString(_T("MID"));  
  5. m_ComBoxLogLevel.AddString(_T("MAX"));  

9、动态创建一个static控件

   (1)先定义一个CStatic的指针,例如:

  1. CStatic* pStatic1;  

  (2)为指针new一个CStatic对象,并创建和显示它,

  1. pStatic1  = new CStatic();  
  2.   
  3. pStatic1->Create(_T("dynamic"),  
  4.     WS_CHILD|WS_VISIBLE|SS_CENTER|SS_NOTIFY,   
  5.     CRect(10,10,150,50),   
  6.     this,   
  7.     65520);  
  8.   
  9. pStatic1->ShowWindow(true);  


  (3)千万别忘了delete掉new生成的对象

  1. 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();

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
只需要如下调用API即可(其他暂停之类的也是如此):
string str=_T("play D:\\test_superplayer\\1.mp3");
mciSendString(str.c_str(),NULL,0,NULL);
其头文件及所需库为:
#pragma comment(lib, "winmm.lib")
#include <Mmsystem.h>

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);
}

  评论这张
 
阅读(679)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018