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);
delete pStatic1;
(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);
}