日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

光标闪烁问题的解决办法

發(fā)布時(shí)間:2025/3/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 光标闪烁问题的解决办法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在調(diào)用Windows API函數(shù)SetCursor設(shè)置光標(biāo)時(shí),可能會(huì)碰到閃爍的問題:移動(dòng)鼠標(biāo),光標(biāo)在Class Cursor(即注冊(cè)窗口類時(shí)指定的Cursor)與預(yù)設(shè)Cursor之間閃爍。

在MSDN上有關(guān)SetCursor函數(shù)的備注中強(qiáng)調(diào),如果Class Cursor非空,那么每當(dāng)鼠標(biāo)移動(dòng),系統(tǒng)都會(huì)把光標(biāo)恢復(fù)為Class Cursor。為了避免光標(biāo)閃爍這一問題,必須處理WM_SETCURSOR消息。(MSDN說明)

下面是一個(gè)例子:程序在主窗口視圖的中間位置繪制RGB條帶,當(dāng)鼠標(biāo)移動(dòng)在條帶范圍就將光標(biāo)設(shè)置成為Cross,此外根據(jù)光標(biāo)的位置,在RGB條帶上方30px處顯示所處條帶的顏色。程序運(yùn)行起來像這樣:

如果在WM_MOUSEMOVE的消息處理中判斷光標(biāo)的位置并設(shè)置光標(biāo)的話,就會(huì)碰到所說的光標(biāo)閃爍問題。WM_MOUSEMOVE的消息處理如下代碼所示:

LRESULT OnMouseMove(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/){POINT ptCursor = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) };RECT rect, rectText;get_rects(&rect, &rectText);InvalidateRect(&rectText);UpdateWindow();if (::PtInRect(&rect, ptCursor)) {::SetCursor(m_cursor);int dx = (rect.right - rect.left) / 3;LPTSTR ppsz[] = { _T("Red"), _T("Green"), _T("Blue") };int index;if (ptCursor.x - rect.left < dx)index = 0;else if (ptCursor.x - rect.left < 2 * dx)index = 1;else index = 2;WTL::CString str;str.Format(_T("Cursor on %s part"), ppsz[index]);CClientDC dc(m_hWnd);dc.DrawText(str, -1, &rectText, DT_CENTER | DT_VCENTER);}else ::SetCursor(CCursor().LoadSysCursor(IDC_ARROW));return 0;}

閃爍產(chǎn)生的原因在于每次進(jìn)入OnMouseMove之前,系統(tǒng)都會(huì)先將光標(biāo)恢復(fù)成Arrow,進(jìn)入OnMouseMove之后,如果光標(biāo)處在RGB條帶范圍內(nèi)則立即被設(shè)置成Cross。

解決辦法就是將上面的判斷邏輯放在WM_SETCURSOR的消息處理中,當(dāng)然獲得光標(biāo)客戶坐標(biāo)的方式不同,代碼如下所示:

LRESULT OnSetCursor(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/){POINT point;::GetCursorPos(&point);ScreenToClient(&point);set_cursor(point);return 0;}

而代碼中的set_cursor私有方法其實(shí)就是上面的判斷邏輯,即:

// ptCursor: in client coordinatevoid set_cursor(POINT& ptCursor) throw(){RECT rect, rectText;get_rects(&rect, &rectText);InvalidateRect(&rectText);UpdateWindow();if (::PtInRect(&rect, ptCursor)) {::SetCursor(m_cursor);int dx = (rect.right - rect.left) / 3;LPTSTR ppsz[] = { _T("Red"), _T("Green"), _T("Blue") };int index;if (ptCursor.x - rect.left < dx)index = 0;else if (ptCursor.x - rect.left < 2 * dx)index = 1;else index = 2;WTL::CString str;str.Format(_T("Cursor on %s part"), ppsz[index]);CClientDC dc(m_hWnd);dc.DrawText(str, -1, &rectText, DT_CENTER | DT_VCENTER);}else ::SetCursor(CCursor().LoadSysCursor(IDC_ARROW));}

這樣就解決了光標(biāo)閃爍的問題。本例的工程文件可在這里下載,它是基于WTL的SDI程序。

P.S. 另外一個(gè)問題雖然簡(jiǎn)單但仍值得一提。上面程序的截圖顯示的結(jié)果實(shí)際上并不準(zhǔn)確,Cross光標(biāo)的中心已經(jīng)處于Green條帶,但條帶上方顯示的卻是"Cursor on Red part"。造成此問題的原因是自定義光標(biāo)的熱點(diǎn)Hot Spot默認(rèn)值為(0, 0),而不是以中心+來標(biāo)識(shí)的。解決辦法是在VS資源編輯器中使用Hot Spot Tool,如下圖所示:

點(diǎn)擊Cross光標(biāo)的中心點(diǎn),熱點(diǎn)坐標(biāo)將變成你所設(shè)置的值,如下圖所示:

總結(jié)

以上是生活随笔為你收集整理的光标闪烁问题的解决办法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色一情一乱一区二区三区 | 暖暖免费观看日本版 | 午夜免费播放观看在线视频 | 夫妻毛片 | 亚洲av无码一区二区二三区软件 | 日本视频在线免费观看 | 日韩不卡一区二区三区 | 亚洲欧美第一 | 午夜性色福利视频 | 精品亚洲一区二区三区四区五区 | 97成人人妻一区二区三区 | 久久艳片www.17c.com | 久久字幕 | av二区在线 | 99免费观看视频 | 午夜日韩欧美 | 999免费 | 免费一级网站 | 中文字幕乱码人妻一区二区三区 | 色www. | 日本三级视频在线播放 | 亚洲国产成人精品女人 | 狠狠躁日日躁夜夜躁av | 丁香色欲久久久久久综合网 | 精品欧美黑人一区二区三区 | 日本高清不卡一区 | 欧美三级少妇高潮 | 这里精品| www.狠狠撸.com| 成人福利小视频 | 精品嫩模一区二区三区 | 亚洲国产经典 | 66av欧美 | 日韩在线一卡 | 久久密av | 国产高清网站 | 麻豆传媒在线视频 | 亚洲精品国产综合 | 二区免费视频 | 欧美乱轮视频 | 毛片黄片免费看 | 综合色av | 国产午夜精品一区二区 | 国产在线天堂 | 2018国产大陆天天弄 | 中文字幕日产乱码中 | 有声小说 成人专区 | 国产一级在线观看视频 | 午夜不卡影院 | 亚洲 欧美 日韩 国产综合 在线 | 日韩香蕉视频 | 麻豆网 | 新版红楼梦在线高清免费观看 | 日韩综合在线 | 青娱乐在线免费观看 | 欧美xxxx网站| 亚洲日b视频 | 被灌满精子的波多野结衣 | 激情久久久久 | 亚洲av首页在线 | 69视频在线观看 | 国产剧情在线观看 | 9l蝌蚪porny中文自拍 | 国产一级淫 | 性色欲网站人妻丰满中文久久不卡 | 亚洲视频欧美视频 | 欧美视频xxx| 丁香色婷婷 | 制服丝袜在线第一页 | 可乐操亚洲 | 九九视频在线免费观看 | 丁香花电影高清在线阅读免费 | av自拍一区| 五月天激情婷婷 | 在线观看视频www | 少妇又色又爽又黄的视频 | 国产男女自拍 | 中文字幕欧美人妻精品一区蜜臀 | 日韩久久久久久久久久久 | 成人91视频 | www.香蕉视频在线观看 | 国产福利一区二区三区在线观看 | 久久窝窝| juliaann欧美二区三区 | 日本裸体动漫 | 97国产视频 | 欧美xx在线 | 色站av| 制服丝袜先锋影音 | 野花社区视频在线观看 | 免费 成 人 黄 色 | 亚洲日本护士毛茸茸 | 91福利一区二区 | 国产欧美第一页 | 欧美极品一区二区 | 97av超碰| 国产在线拍揄自揄拍 | 国产精品三级视频 | 国产精品情侣呻吟对白视频 |