WinCE下的ListView Control和WIN32相較,有個明顯的不同就是長按觸控螢幕或長按滑鼠左鍵,會繪製一個小圓圈.這個小圓圈比較有意思,微軟的explorer在實現時,圓圈消失即相當於win32的按下滑鼠右鍵.這個方法很好的彌補了觸控螢幕無法表示右鍵的缺陷.
雖然這個方式不錯,但如果我們需要用到這個小圓圈,卻不能不費點腦子,因為在微軟的文檔上,隻字不提這個小圓圈(或是我沒找到?).不過有了spy++,一切都不是難事
以下是在spy++協助下完成的截取小圓圈消失後發送的訊息代碼:
WinProc(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam)
...{
switch(wMsg)
...{
case WM_NOTIFY:
...{
switch( ( (LPNMLISTVIEW) lParam)->hdr.code)
...{
case 1000:
//在這裡處理小圓圈消失後的事件
break;
}
}
}
}
如果需要判斷這個小圓圈訊息是哪個ListView控制項發出的,則代碼只需小小更改:
WinProc(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam)
...{
switch(wMsg)
...{
case WM_NOTIFY:
...{
switch (wParam)
...{
case IDC_LIST: //IDC_LIST為某個ListView控制項的ID號
...{
switch( ( (LPNMLISTVIEW) lParam)->hdr.code)
...{
case 1000:
//在這裡處理小圓圈消失後的事件
break;
}
break;
}
}
}
}
}
WinCE中顯示隱藏軟鍵盤2008-07-15 09:08
在彈出的強制回應對話方塊中,如果有編輯框,需要自動顯示軟鍵盤進行輸入,並且自動調節軟鍵盤位置。如果不是編輯框,則應該關閉軟鍵盤,並設定到原始位置。 繼承了CEdit類,處理其獲得焦點和失去焦點的訊息: ON_CONTROL_REFLECT(EN_SETFOCUS, OnSetfocus) ON_CONTROL_REFLECT(EN_KILLFOCUS, OnKillfocus) void CMyEdit::OnSetfocus() { RECT rect; GetRect( &rect ); ClientToScreen(&rect); SIPINFO si; si.dwImDataSize = 0; si.cbSize = sizeof(si); BOOL bSip = SipGetInfo(&si); if(rect.top >= 150) { si.rcSipRect.top = 0; } else { si.rcSipRect.top = 195;//half of the screen } SipSetInfo(&si); SipShowIM(SIPF_ON); } void CMyEdit::OnKillfocus() { SipShowIM(SIPF_OFF); SIPINFO si; si.dwImDataSize = 0; si.cbSize = sizeof(si); BOOL bSip = SipGetInfo(&si); si.rcSipRect.top = 195; SipSetInfo(&si); } |