原理:當鼠標指到 escape 按鍵,則當前escape消失 另外一個顯示。
1. 新增加一個類 基類爲CButton,右鍵工程,
2. 控件關聯成員變量 成員變量放到工程Dlg類中,成員變量類型爲步驟1 中創建的類CDyBtn。
3. 給新增加的類CDyBtn 增加windows消息WM_MOUSEMOVE響應的函數OnMouseMove:(因爲是button類 所以只有到鼠標移動到button上才響應WM_MOUSEMOVE)
4. 在工程Dlg 的OnInitDialog中實現 兩個按鈕的指針交換。(查看函數最後 TODO::部分內容和註釋)
BOOL Cvs2008_SX_jiaocheng08Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 將“關於...”菜單項添加到系統菜單中。
// IDM_ABOUTBOX 必須在系統命令範圍內。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 設置此對話框的圖標。當應用程序主窗口不是對話框時,框架將自動
// 執行此操作
SetIcon(m_hIcon, TRUE); // 設置大圖標
SetIcon(m_hIcon, FALSE); // 設置小圖標
// TODO: 在此添加額外的初始化代碼
//表示在對話框即將顯示時被調用。
//交換兩個控件的成員變量
m_btn1.m_pBtn = &m_btn2;//m_pBtn 爲類型爲CDyBtn* 類型的成員 變量
m_btn2.m_pBtn = &m_btn1;
return TRUE; // 除非將焦點設置到控件,否則返回 TRUE
}
5. 在CDyBtn類成員函數OnMouseMove中添加代碼
void CDyBtn::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息處理程序代碼和/或調用默認值
ShowWindow(SW_HIDE);
m_pBtn->ShowWindow(SW_SHOW);//顯示當前直到的button
CButton::OnMouseMove(nFlags, point);
}
6. 爲了剛開始顯示一個按鈕,把button1設置爲不可見