天天看點

MFC對話框,複選框,單選鈕畫圖

建立一個畫圖界面

MFC對話框,複選框,單選鈕畫圖

首先将控件都綁定控件變量

然後在初始化函數BOOL CCRdemoDlg::OnInitDialog()中添加初始化資訊CheckRadioButton(IDC_RD_RECT,IDC_RD_ROUND,IDC_RD_ROUND)

函數功能:該函數給一組單選按鈕中的一個指定按鈕加上選中标志,并且清除組中其他按鈕的選中标志。 函數原型:BOOL CheckRadioButton(HWND hDlg, int nlDFirstButton, int nlDLastBUtton, int nlDCheckButton); 參數: hDlg:指向包含單選按鈕的對話框的句柄。 nlDFirstButton:指定組中第1個 單選按鈕的辨別符。 nlDLastButton:指定組中最後一個單選按鈕的辨別符。 nlDCheckButton:指出要選中的那個單選按鈕的辨別符。 傳回值:如果函數執行成功,傳回值非零;如果失敗,則傳回零。若想擷取更多 錯誤資訊,請調用GetLastError函數。 然後需要用到對話框屬性中消息函數的擦除背景消息函數

BOOL CCRdemoDlg::OnEraseBkgnd(CDC* pDC) //擦除背景函數
{
	// TODO: 在此添加消息處理程式代碼和/或調用預設值


	BOOL bRet= CDialogEx::OnEraseBkgnd(pDC);
	int nRed,nGreen,nBlue;
	nRed=m_chk_red.GetCheck()?255:0;
	nGreen=m_chk_green.GetCheck()?255:0;
	nBlue=m_chk_blue.GetCheck()?255:0;
	COLORREF crFore=RGB(nRed,nGreen,nBlue);      //組合成新的顔色,用來畫圖的前景色
	CBrush brush;               //建立刷子,實心,然後用這個刷子來畫圖
	brush.CreateSolidBrush(crFore);
	CBrush *pOldBrush=pDC->SelectObject(&brush);  //先把刷子選入dc,dc裡原來舊的刷子用一個指針保留下來
	RECT rc={50,20,150,120};
	if(m_rd_rect.GetCheck())
	{
		pDC->Rectangle(&rc);         //畫矩形
	}
	else
		pDC->Ellipse(&rc);
	pDC->SelectObject(pOldBrush);      //把舊的畫刷放回去

	return bRet;
		
}
           

對藍色選擇框的程式,添加事件( 單擊):

void CCRdemoDlg::OnBnClickedChkBlue()
{
	// TODO: 在此添加控件通知處理程式代碼
	Invalidate();//失效,重新繪制對話框,失效以後就擦除背景,也就是執行上面的函數

}
           

其他選擇框分别調用OnBnClickedChkBlue();函數即可