介紹函數:
void AFXAPI DDX_Control( CDataExchange* pDX, int nIDC, CWnd& rControl );
參數一:指向CDataExchange的指針,用于建立資料交換設備上下文;
參數二:控件IDC;
參數三:控件變量。
重寫SetIcon()函數:
頭文件:
void SetIcon(int nIconInId, int nIconOutId = NULL); //帶參數的成員函數
源文件:
void CButtonST::SetIcon(int nIconInId, int nIconOutId)
{
HICON hIconIn; //定義HICON 變量,用于保存圖片
HICON hIconOut;
HINSTANCE hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(nIconInId), RT_GROUP_ICON);
//鼠標點擊時獲得應用資源句柄
hIconIn = (HICON)::LoadImage(hInstResource/*AfxGetApp()->m_hInstance*/, MAKEINTRESOURCE(nIconInId), IMAGE_ICON, 0, 0, 0);
// 鼠標移開時加載圖片
hIconOut = (nIconOutId == NULL) ? NULL : (HICON)::LoadImage(hInstResource/*AfxGetApp()->m_hInstance*/, MAKEINTRESOURCE(nIconOutId), IMAGE_ICON, 0, 0, 0);
SetIcon(hIconIn, hIconOut); //調用
}
void CButtonST::SetIcon(HICON hIconIn, HICON hIconOut)
{
// Note: the following two lines MUST be here! even if
// BoundChecker says they are unnecessary!
if (m_hIconIn != NULL) ::DestroyIcon(m_hIconIn); //判定是否與圖片相關聯
if (m_hIconOut != NULL) ::DestroyIcon(m_hIconOut);
// Set icon when the mouse is IN the button
m_hIconIn = hIconIn;
// Set icon when the mouse is OUT the button
m_hIconOut = (hIconOut == NULL) ? m_hIconIn : hIconOut;
ICONINFO ii; //ICONINFO 結構體
// Get icon dimension
ZeroMemory(&ii, sizeof(ICONINFO)); //ii內存設0
::GetIconInfo(m_hIconIn, &ii); //設置自定義圖標
m_cxIcon = (BYTE)(ii.xHotspot * 2);
m_cyIcon = (BYTE)(ii.yHotspot * 2);
::DeleteObject(ii.hbmMask);
::DeleteObject(ii.hbmColor);
RedrawWindow();
} // End of SetIcon
程序流程:
a)添加頭文件
CButton m_btn;定義一對象
b)在新建框架類中初始化
BOOL CMy5Dlg::OnInitDialog()
{
m_btn.SetIcon(IDI_ICON1,IDI_ICON2); //設置兩幅圖標
}
c)鼠標點擊交換圖片
void CMy5Dlg::DoDataExchange(CDataExchange* pDX)
{
DDX_Control(pDX,IDC_BUTTON1,m_btn);
}