給大家兩個訊息,happy的去玩吧:WM_CHANGECBCHAIN 和 WM_DRAWCLIPBOARD。。
原理:剪貼簿有一個監控鏈表,這個鏈表中就是監控了剪貼簿的程式,如果有新的監控程式加入或移出,那麼就會給這個鏈表中每個程式發送一個訊息WM_CHANGECBCHAIN ,當然這是採用鏈式的傳遞訊息,每個程式負責傳給下一個程式;當剪貼簿中的資料發生變化時,會給我們的視窗發送一個WM_DRAWCLIPBOARD訊息。
訊息處理函數:
afx_msg void OnChangeCbChain(HWND hWndRemove, HWND hWndAfter);
afx_msg void OnDrawClipboard();
hWndRemove:從監控剪貼簿的列表中刪除的那個視窗控制代碼。
hWndAfter:列表中被移除的那個視窗的下一個視窗控制代碼
HWND m_hNext;
m_hNext=::SetClipboardViewer(this->GetSafeHwnd()); //監控鏈表
void CdrayFilesDlg::OnChangeCbChain(HWND hWndRemove, HWND hWndAfter){CDialogEx::OnChangeCbChain(hWndRemove, hWndAfter);// TODO: 在此處添加訊息處理常式代碼if(m_hNext==hWndRemove)m_hNext=hWndAfter;else if(m_hNext)::SendMessageW(m_hNext,WM_CHANGECBCHAIN,(WPARAM)hWndRemove,(LPARAM)hWndAfter);}void CdrayFilesDlg::OnDrawClipboard(){CDialogEx::OnDrawClipboard();// TODO: 在此處添加訊息處理常式代碼if(m_hNext)::SendMessageW(m_hNext,WM_CHANGECBCHAIN,0,0);::OpenClipboard(GetSafeHwnd());HANDLE handleData=GetClipboardData(CF_TEXT);CString data((char*)handleData);m_clipboardData.AddString(data+"\r\n");::CloseClipboard();}
代碼很簡單,就不解釋了。。