weidagang2046的專欄

          物格而后知致
          隨筆 - 8, 文章 - 409, 評(píng)論 - 101, 引用 - 0
          數(shù)據(jù)加載中……

          如何在改變鼠標(biāo)光標(biāo)時(shí)不閃爍

          ??? 微軟知識(shí)庫有一篇文章Q131991描述了三種方法來改變基于MFC應(yīng)用的鼠標(biāo)光標(biāo)。其中一種方法是重載CWnd::PreCreateWindow()函數(shù)注冊自己的要改變鼠標(biāo)指針的窗口類。這個(gè)方法對(duì)于要始終使用一個(gè)鼠標(biāo)光標(biāo)的應(yīng)用程序很適合。

          ??? 如果在應(yīng)用程序中要?jiǎng)討B(tài)改變鼠標(biāo)光標(biāo),微軟知識(shí)庫的這篇文章建議重載CWnd::OnSetCursor()來實(shí)現(xiàn)。但是這種方法有一個(gè)缺點(diǎn),就是當(dāng)設(shè)置鼠標(biāo)光標(biāo)及還原時(shí)都會(huì)出現(xiàn)令人討厭的光標(biāo)閃爍。

          ??? 如果應(yīng)用程序中要使用幾個(gè)不同的鼠標(biāo)光標(biāo),為了不發(fā)生任何光標(biāo)閃爍,本文介紹一種方法:首先按照微軟知識(shí)庫文章所說重載PreCreateWindow函數(shù),但是不要指定要使用的鼠標(biāo)光標(biāo),而是使用NULL。這樣就防止了Windows或MFC針對(duì)鼠標(biāo)指針做任何操作。

          BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs)
          {
          // 創(chuàng)建自己的窗口類,窗口不設(shè)置光標(biāo),以便根據(jù)需要進(jìn)行設(shè)置?
          if (cs.lpszClass == NULL)
          cs.lpszClass = AfxRegisterWndClass(CS_DBLCLKS);
          return CScrollView::PreCreateWindow(cs);
          }

          ??? 因?yàn)榇翱陬悰]有任何事先指定好的的鼠標(biāo)指針,所以以上代碼有效地派出了光標(biāo)的閃爍。(注意這段代碼創(chuàng)建的窗口類也沒有背景刷,所以窗口的背景色需要自己畫。為此要向函數(shù)AfxRegisterWndClass()傳遞第三個(gè)參數(shù)作為背景刷。)

          ??? 光標(biāo)的閃爍是消除了,但同時(shí)光標(biāo)也沒了!不用擔(dān)心。在處理鼠標(biāo)事件OnMouseMove時(shí)設(shè)置光標(biāo)是很容易的事情。實(shí)踐證明,如果要在應(yīng)用窗口中改變鼠標(biāo)指針,在OnMouseMove事件處理模塊中設(shè)置光標(biāo)是最方
          便的。

          void CMyView::OnMouseMove(UINT nFlags, CPoint point)
          {
          // 設(shè)置光標(biāo)表示當(dāng)前的操作
          if (m_nOperation == OPERATION_1)
          ::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS));
          else if (m_nOperation == OPERATION_2)
          ::SetCursor(AfxGetApp()->LoadStandardCursor( ??? ));
          else // 普通光標(biāo)指針
          ::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
          }

          盡管要做一點(diǎn)額外的工作,但它實(shí)現(xiàn)了應(yīng)用中不同的鼠標(biāo)指針變化,同時(shí)消除了閃爍。

          from: http://www.vckbase.com/vckbase/vckbase9/vc/nonctrls/system_30/0930003.htm

          posted on 2006-09-29 11:18 weidagang2046 閱讀(2585) 評(píng)論(0)  編輯  收藏 所屬分類: Windows

          主站蜘蛛池模板: 崇信县| 韶关市| 乳源| 崇义县| 临安市| 望江县| 东乌珠穆沁旗| 台江县| 同江市| 钟祥市| 三原县| 城步| 定襄县| 讷河市| 阿合奇县| 房山区| 嵩明县| 灵宝市| 德惠市| 台湾省| 全州县| 林口县| 凤山县| 乌审旗| 广汉市| 嘉祥县| 柯坪县| 信丰县| 石棉县| 马公市| 菏泽市| 桐梓县| 沁水县| 遂昌县| 崇阳县| 中江县| 县级市| 蒲江县| 电白县| 绥宁县| 潮安县|