WM5.0中IME跳出表單調整加捲軸(VC++)

來源:互聯網
上載者:User

準備工作:加個基於對話方塊的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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.