成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

win32拖拽編程

idisfkj / 3653人閱讀

摘要:同時(shí),由于鎖定導(dǎo)致了我們?cè)谕献r(shí)對(duì)窗口的繪制無(wú)法生效的問(wèn)題亦可解決。免費(fèi)領(lǐng)取驗(yàn)證碼內(nèi)容安全短信發(fā)送直播點(diǎn)播體驗(yàn)包及云服務(wù)器等套餐更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營(yíng)經(jīng)驗(yàn)分享請(qǐng)?jiān)L問(wèn)網(wǎng)易云社區(qū)。文章來(lái)源網(wǎng)易云社區(qū)

本文由作者鄒啟文授權(quán)網(wǎng)易云社區(qū)發(fā)布。

在郵箱大師PC版中,我們需要實(shí)現(xiàn)一個(gè)功能:賬號(hào)和郵件夾拖拽排序。
準(zhǔn)備
封裝win32 API。我們使用到的API有,
ImageList_Create、ImageList_Destroy、
ImageList_Add、ImageList_AddMasked、ImageList_Remove、
ImageList_BeginDrag、ImageList_DragEnter、ImageList_EndDrag、ImageList_DragLeave、
ImageList_DragMove、ImageList_SetDragCursorImage、ImageList_DragShowNoLock。
For more information,see Using Image Lists

Drag開(kāi)始
攔截鼠標(biāo)的LButtonDown消息,判斷point所在的控件是否符合拖拽要求,如果符合,記住狀態(tài)(這里使用bool will_drag_和MailFolderNode drag_from_標(biāo)識(shí)可以拖拽,使用bool is_draging_標(biāo)識(shí)正在拖拽中,使用MailFolderNode drag_to_標(biāo)識(shí)接受控件)

Drag進(jìn)行中
攔截鼠標(biāo)的MouseMove消息,判斷will_drag_,如果是,那么需要做如下操作:
->ImageList_Create創(chuàng)建ImageList對(duì)象
->ImageList_AddMasked加入拖拽時(shí)將要顯示的圖像
->ImageList_BeginDrag即將開(kāi)始拖拽,并設(shè)置鼠標(biāo)在拖拽圖像中的位置
->ImageList_DragEnter進(jìn)入拖拽,并設(shè)置拖拽圖像的位置
->修改will_drag_為false,is_draging_為true,保證上面幾步只做一次
->判斷point是否在拖拽接受范圍內(nèi),以及point對(duì)應(yīng)控件是否接受拖拽(及時(shí)更新drag_to_)
->如果是,那么執(zhí)行ImageList_DragMove、ImageList_DragShowNoLock(TRUE)、SetCursor(LoadCursor(NULL, IDC_ARROW));
->如果不是,那么執(zhí)行ImageList_DragShowNoLock(FALSE)、SetCursor(LoadCursor(NULL, IDC_NO));

Drag結(jié)束
攔截鼠標(biāo)的LButtonUp消息,如果is_draging_,那么執(zhí)行ImageList_EndDrag、ImageList_DragLeave、ImageList_Destroy,然后根據(jù)drag_from_和drag_to_處理本次拖拽操作。

問(wèn)題

Ⅰ、如何使拖拽圖像背景透明?
使用CreateCompatibleBitmap創(chuàng)建位圖,調(diào)用FillRect將位圖背景刷成白色RGB(255,255,255);
在ImageList_Create時(shí)指定ILC_COLOR32 | ILC_MASK;
調(diào)用ImageList_AddMasked(bitmap, RGB(255,255,255));
至此,拖拽圖像中的白色會(huì)與mask"中和"

Ⅱ、在拖拽時(shí)出現(xiàn)窗口繪制被"破壞",并且殘留痕跡?
這是由于在調(diào)用ImageList_DragEnter時(shí)鎖定了窗口導(dǎo)致,我們使用NULL代替HWND即可解決此問(wèn)題。同時(shí),由于鎖定導(dǎo)致了我們?cè)谕献r(shí)對(duì)窗口的繪制無(wú)法生效的問(wèn)題亦可解決。另,記得在拖拽結(jié)束時(shí)ImageList_DragLeave(NULL);

Ⅲ、ImageList_BeginDrag和ImageList_DragEnter中的位置是何含義?
在ImageList_BeginDrag中,此處位置為鼠標(biāo)圖標(biāo)相對(duì)于拖拽圖像的位置。
在mageList_DragEnter中,此處位置為鼠標(biāo)相對(duì)于HWND的位置,如果HWND為NULL,那么便是相對(duì)于屏幕的位置。

Ⅳ、ImageList_DragShowNoLock含義是什么?
參數(shù)BOOL表示是否顯示拖拽圖像。當(dāng)拖拽move在可接受控件時(shí),顯示拖拽鼠標(biāo),更改鼠標(biāo)樣式(或使用ImageList_SetDragCursorImage設(shè)置自定義鼠標(biāo)樣式,注意此時(shí)需隱藏ShowCursor(FALSE));否則,不顯示拖拽圖像,并顯示IDC_NO不可操作樣式。

Ⅴ、will_drag_的標(biāo)識(shí)是否多余?
為何要等到MouseMove再去真正開(kāi)始drag?因?yàn)檎5膯螕舨僮?,我們不希望看到拖拽圖像,因此設(shè)置此標(biāo)記。實(shí)際應(yīng)用中發(fā)現(xiàn),有時(shí)候單擊時(shí)發(fā)生"抖動(dòng)",此時(shí)也出現(xiàn)拖拽圖像,因此我們加入了延時(shí),在按下100ms后才將will_drag_設(shè)置成true,可在一定程度上減小抖動(dòng)出現(xiàn)拖拽圖像的情況。

免費(fèi)領(lǐng)取驗(yàn)證碼、內(nèi)容安全、短信發(fā)送、直播點(diǎn)播體驗(yàn)包及云服務(wù)器等套餐

更多網(wǎng)易技術(shù)、產(chǎn)品、運(yùn)營(yíng)經(jīng)驗(yàn)分享請(qǐng)?jiān)L問(wèn)網(wǎng)易云社區(qū)。

文章來(lái)源: 網(wǎng)易云社區(qū)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/25341.html

相關(guān)文章

  • 基于electron制作一個(gè)node壓縮圖片的桌面應(yīng)用

    摘要:壓縮圖片桌面應(yīng)用基于制作一個(gè)壓縮圖片的桌面應(yīng)用下載地址項(xiàng)目源碼準(zhǔn)備工作我們來(lái)整理一下我們需要做什么壓縮圖片模塊獲取文件路徑桌面應(yīng)用生成壓縮圖片我們需要使用這個(gè)庫(kù)來(lái)壓縮圖片,這里我們把這個(gè)庫(kù)封裝成壓縮模塊。 壓縮圖片桌面應(yīng)用imagemin-electron 基于electron制作一個(gè)node壓縮圖片的桌面應(yīng)用 下載地址:https://github.com/zenoslin/imag...

    bigdevil_s 評(píng)論0 收藏0
  • node-webkit實(shí)踐-一鍵安裝

    摘要:博客原文地址實(shí)踐一鍵安裝前言很久以前我簡(jiǎn)單的寫(xiě)過(guò)關(guān)于的使用但是我在更換博客的時(shí)候丟棄了,我在下面的文章把它引用一遍。 博客原文地址node-webkit實(shí)踐-一鍵安裝 前言 很久以前我簡(jiǎn)單的寫(xiě)過(guò)關(guān)于node-webkit的使用,但是我在更換博客的時(shí)候丟棄了,我在下面的文章把它引用一遍。 node-webkit其實(shí)在很多地方用處很大,請(qǐng)自行發(fā)散。 本文的相關(guān)代碼:點(diǎn)擊查...

    yy736044583 評(píng)論0 收藏0
  • Electron折騰筆記

    摘要:讀取文件路徑寫(xiě)入配置文件調(diào)用服務(wù)調(diào)用服務(wù)部分,主要用到的子進(jìn)程。最后,上一張初步完成之后的運(yùn)行圖博客原文 背景 部門(mén)的項(xiàng)目每次開(kāi)發(fā)都需要手動(dòng)開(kāi)啟三個(gè)服務(wù):server、webpack、grunt,每個(gè)服務(wù)都要輸入一些東西(端口號(hào),項(xiàng)目命,項(xiàng)目類(lèi)型,啟動(dòng)器名)。而且,在推送調(diào)試的時(shí)候,這三項(xiàng)服務(wù)非常容易被終止掉,然后又得一個(gè)個(gè)開(kāi)起來(lái),總之每天都要來(lái)上那么10幾遍吧??磮D:showImg(...

    DataPipeline 評(píng)論0 收藏0
  • 不要迷戀我,我只是利用Python修改了游戲內(nèi)存

    摘要:上篇文章我許了一個(gè)愿,就是想讓大家多多關(guān)注我,然后我的粉絲就蹭蹭的漲了好幾百,謝謝大家的厚愛(ài)??墒俏野l(fā)現(xiàn)粉絲是漲了,三連變少了,謝謝大家這次給我三連,我一定再接再厲。地址的尋找陽(yáng)光總值,種植一個(gè)豌豆需要,非常不夠用。 目錄 前言 游戲的安裝 思路 ? ? ? 一句話(huà)總結(jié) ? ? ? 大概的思...

    ermaoL 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<