MFC中常见控件的操作

来源:互联网 发布:淘宝直通车广撒网 编辑:程序博客网 时间:2024/05/10 23:08

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;//获取当前窗口的DCif (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);
}

原创粉丝点击