準備工作:加個基於對話方塊的MFC智慧型裝置的項目,隨便加入幾個Edit控制項和BUTTON控制項(是為了顯示滾動的效果,同時Edit控制項還可以調入IME)
開始工作:在視窗的訊息中找到WM_VSCROLL訊息,該訊息將用於豎直捲軸。
先在視窗初始化函數OnInitDialog()中加入:
int ypos = GetScrollPos(SB_VERT);
if (ypos !=0)
ScrollWindow(0,ypos); //恢複視窗的垂直捲動區域
SCROLLINFO vinfo;
vinfo.cbSize = sizeof(vinfo);
vinfo.fMask = SIF_ALL;
vinfo.nPage = 80;
vinfo.nMax= 300;
vinfo.nMin = 0;
vinfo.nTrackPos = 0;
vinfo.nPos = 0;
//設定垂直捲軸資訊
SetScrollInfo(SB_VERT,&vinfo);
對豎直捲軸進行初始化,然後就是在系統給定的訊息函數OnVScroll中加入代碼了:
void CScrollDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CRect rc;
GetWindowRect(&rc);
SCROLLINFO si = {sizeof(SCROLLINFO),SIF_PAGE|SIF_POS|SIF_RANGE|SIF_TRACKPOS, 0, 0, 0, 0,0};
::GetScrollInfo (m_hWnd, SB_VERT, &si);
int MIN_VSCROLL_VALUE = 0;
int MAX_VSCROLL_VALUE = si.nMax;
int iInterval = 0;
int Pos = si.nPos;
switch (nSBCode)
{
case SB_LINEUP:
Pos -= 20;
break;
case SB_PAGEUP:
Pos -= 60;
break;
case SB_LINEDOWN:
Pos += 20;
break;
case SB_PAGEDOWN:
Pos += 60;
break;
case SB_TOP:
Pos = MIN_VSCROLL_VALUE;
break;
case SB_BOTTOM:
Pos = MAX_VSCROLL_VALUE;
break;
case SB_THUMBTRACK:
case SB_THUMBPOSITION:
Pos = si.nTrackPos;
break;
}
if(Pos < MIN_VSCROLL_VALUE)
Pos = MIN_VSCROLL_VALUE;
else if(Pos >=(MAX_VSCROLL_VALUE-si.nPage))
Pos = MAX_VSCROLL_VALUE - si.nPage;
iInterval = Pos - si.nPos;
if(0 != iInterval)
{
si.fMask = SIF_POS;
si.nPos = Pos;
::SetScrollInfo (m_hWnd, SB_VERT, &si, TRUE);
ScrollWindowEx(0, -iInterval, NULL, NULL,
NULL, NULL, SW_SCROLLCHILDREN);
}
//Invalidate();//該重繪對話方塊的語句好像注釋掉也沒關係,還可以讓對話方塊滾動
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
讓捲軸顯示用ShowScrollBar(SB_VERT,TRUE);
隱藏用ShowScrollBar(SB_VERT,FALSE);
調用IME鍵盤需引入SIPAPI.h檔案
SipShowIM(SIPF_ON);顯示IME軟鍵盤
SipShowIM(SIPF_OFF);隱藏IME軟鍵盤
當一個Edit控制項觸發EN_SETFACUS事件時,可以設定顯示IME
當觸發EN_KILLFACUS事件時,可以隱藏IME