摘要:同時(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
摘要:壓縮圖片桌面應(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...
摘要:博客原文地址實(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)擊查...
摘要:讀取文件路徑寫(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(...
摘要:上篇文章我許了一個(gè)愿,就是想讓大家多多關(guān)注我,然后我的粉絲就蹭蹭的漲了好幾百,謝謝大家的厚愛(ài)??墒俏野l(fā)現(xiàn)粉絲是漲了,三連變少了,謝謝大家這次給我三連,我一定再接再厲。地址的尋找陽(yáng)光總值,種植一個(gè)豌豆需要,非常不夠用。 目錄 前言 游戲的安裝 思路 ? ? ? 一句話(huà)總結(jié) ? ? ? 大概的思...
閱讀 1360·2023-04-25 15:21
閱讀 2688·2021-11-24 10:23
閱讀 3413·2021-10-11 10:59
閱讀 3262·2021-09-03 10:28
閱讀 1741·2019-08-26 13:45
閱讀 2335·2019-08-26 12:11
閱讀 933·2019-08-26 12:00
閱讀 1721·2019-08-26 10:44