日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
顯示鼠標(biāo)的快捷鍵怎么設(shè)置

簡(jiǎn)介

在Windows操作系統(tǒng)中,鼠標(biāo)單擊事件是一個(gè)非常常見(jiàn)的交互操作,通過(guò)捕捉鼠標(biāo)單擊事件,我們可以實(shí)現(xiàn)對(duì)應(yīng)用程序的控制,如打開(kāi)文件、選擇菜單項(xiàng)等,本文將介紹一種簡(jiǎn)單的方法來(lái)突出顯示鼠標(biāo)單擊的Windows方法,并提供相關(guān)的技術(shù)介紹和解答。

方法原理

要實(shí)現(xiàn)鼠標(biāo)單擊事件的突出顯示,我們需要使用Windows API中的SetCursorPos函數(shù),SetCursorPos函數(shù)用于設(shè)置鼠標(biāo)光標(biāo)的位置,通過(guò)設(shè)置光標(biāo)的位置為一個(gè)特殊的標(biāo)記點(diǎn),我們可以在用戶單擊該區(qū)域時(shí)觸發(fā)相應(yīng)的事件。

具體實(shí)現(xiàn)

1、引入頭文件

在編寫(xiě)代碼之前,我們需要先引入Windows API中的頭文件:

include 

2、定義標(biāo)記點(diǎn)坐標(biāo)

為了實(shí)現(xiàn)鼠標(biāo)單擊時(shí)的突出顯示效果,我們需要定義一個(gè)特殊的標(biāo)記點(diǎn)坐標(biāo),通常情況下,這個(gè)標(biāo)記點(diǎn)的坐標(biāo)可以設(shè)置為(0, 0),表示鼠標(biāo)點(diǎn)擊的任何位置都會(huì)觸發(fā)事件。

3、注冊(cè)鼠標(biāo)單擊事件處理函數(shù)

接下來(lái),我們需要注冊(cè)一個(gè)鼠標(biāo)單擊事件處理函數(shù),當(dāng)用戶單擊鼠標(biāo)時(shí),系統(tǒng)會(huì)調(diào)用這個(gè)函數(shù),并傳入鼠標(biāo)點(diǎn)擊的坐標(biāo),在這個(gè)函數(shù)中,我們可以編寫(xiě)具體的事件處理邏輯。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_LBUTTONDOWN: // 鼠標(biāo)左鍵按下消息
            {
                int x = GET_X_LPARAM(lParam); // 獲取鼠標(biāo)點(diǎn)擊的x坐標(biāo)
                int y = GET_Y_LPARAM(lParam); // 獲取鼠標(biāo)點(diǎn)擊的y坐標(biāo)
                if (x == 0 && y == 0) // 如果點(diǎn)擊的是標(biāo)記點(diǎn)(0, 0)
                {
                    MessageBox(hWnd, L"鼠標(biāo)左鍵單擊", L"提示", MB_OK); // 彈出提示框
                }
            }
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

4、創(chuàng)建窗口并注冊(cè)消息映射表

在主程序中,我們需要?jiǎng)?chuàng)建一個(gè)窗口,并注冊(cè)消息映射表,這樣,當(dāng)用戶與窗口進(jìn)行交互時(shí),系統(tǒng)會(huì)根據(jù)消息類(lèi)型調(diào)用相應(yīng)的處理函數(shù)。

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    const char *CLASS_NAME = "SampleWindow"; // 窗口類(lèi)名
    HWND hWnd; // 窗口句柄
    MSG msg; // 消息結(jié)構(gòu)體變量
    WNDCLASSEX wcex; // Windows控件擴(kuò)展信息結(jié)構(gòu)體變量
    wcex.cbSize = sizeof(WNDCLASSEX); // 設(shè)置結(jié)構(gòu)體大小為sizeof(WNDCLASSEX)
    wcex.style = CS_HREDRAW | CS_VREDRAW; // 設(shè)置窗口樣式為自動(dòng)重繪
    wcex.lpfnWndProc = WndProc; // 將自定義的窗口處理函數(shù)賦值給lpfnWndProc成員變量
    wcex.cbClsExtra = NULL; // cbWndExtra成員變量保留不變(NULL)
    wcex.cbWndExtra = NULL; // cbWndExtra成員變量保留不變(NULL)
    wcex.hInstance = hInstance; // 將實(shí)例句柄賦值給hInstance成員變量
    wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); // 加載應(yīng)用程序圖標(biāo)資源IDI_APPLICATION到hIcon成員變量中
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW); // 加載箭頭光標(biāo)資源IDC_ARROW到hCursor成員變量中
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // 將窗口背景色設(shè)置為COLOR_WINDOW + 1(白色)到hbrBackground成員變量中
    wcex.lpszMenuName = NULL; // 將lpszMenuName成員變量設(shè)置為NULL(無(wú)菜單欄)
    wcex.lpszClassName = CLASS_NAME; // 將窗口類(lèi)名賦值給lpszClassName成員變量
    wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // 加載小圖標(biāo)資源IDI_APPLICATION到hIconSm成員變量中
    RegisterClassEx(&wcex); // 注冊(cè)窗口類(lèi)信息到Windows操作系統(tǒng)中(創(chuàng)建窗口)
    hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, CLASS_NAME, L"簡(jiǎn)單突出顯示鼠標(biāo)單擊的Windows方法", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 300, 200, NULL, NULL, hInstance, NULL); // 根據(jù)指定的參數(shù)創(chuàng)建窗口并返回窗口句柄(窗口創(chuàng)建成功后才返回)
    ShowWindow(hWnd, nCmdShow); // 將窗口顯示出來(lái)(正常顯示或最小化顯示)
    UpdateWindow(hWnd); // 將窗口內(nèi)容更新到屏幕上(刷新窗口內(nèi)容)
    while (GetMessage(&msg, NULL, NULL, NULL)) // 當(dāng)接收到消息時(shí)進(jìn)入循環(huán)處理消息隊(duì)列中的信息直到結(jié)束前一個(gè)消息的處理過(guò)程后才開(kāi)始處理下一個(gè)消息,這里就是接收和分派消息的過(guò)程,當(dāng)沒(méi)有消息時(shí)跳出循環(huán),這里的GetMessage()函數(shù)是用來(lái)從系統(tǒng)的內(nèi)核消息隊(duì)列中取出信息的,如果該函數(shù)返回-1說(shuō)明系統(tǒng)已經(jīng)停止了或者當(dāng)前線程已經(jīng)退出了,因此需要判斷一下GetMessage()函數(shù)的返回值是否為-1,如果是則跳出循環(huán),否則就繼續(xù)執(zhí)行循環(huán)體內(nèi)的語(yǔ)句,因?yàn)镚etMessage()函數(shù)每次調(diào)用都會(huì)把系統(tǒng)中所有消息隊(duì)列中的信息取出并放入msg結(jié)構(gòu)體中所以只要有一個(gè)消息就會(huì)被取出來(lái)然后放到msg結(jié)構(gòu)體中等待處理,所以這里要判斷一下GetMessage()函數(shù)的返回值是不是-1如果是的話就跳出循環(huán)否則就繼續(xù)執(zhí)行循環(huán)體內(nèi)的語(yǔ)句,因?yàn)橹挥挟?dāng)所有的消息都被取出來(lái)了以后才會(huì)跳出循環(huán),否則的話就會(huì)一直運(yùn)行下去直到有一條消息被取出來(lái)為止,最后還要加上一句判斷語(yǔ)句判斷一下msg結(jié)構(gòu)體中的wParam參數(shù)是否等于WM_QUIT那么就跳出循環(huán)并且結(jié)束程序因?yàn)楫?dāng)系統(tǒng)發(fā)送WM_QUIT消息的時(shí)候就代表著系統(tǒng)正在關(guān)閉程序這個(gè)時(shí)候如果程序還在執(zhí)行的話就會(huì)造成一些問(wèn)題所以需要在這里加上一句判斷語(yǔ)句來(lái)判斷一下是否收到了WM_QUIT消息如果是的話就跳出循環(huán)并且結(jié)束程序,最后還要加上一句判斷語(yǔ)句判斷一下msg結(jié)構(gòu)體中的lParam參數(shù)是否等于0那么就直接跳過(guò)這次循環(huán)因?yàn)楫?dāng)用戶點(diǎn)擊了標(biāo)記點(diǎn)的時(shí)候系統(tǒng)會(huì)發(fā)送一個(gè)WM_LBUTTONDOWN消息但是由于我們?cè)谇懊嬉呀?jīng)把這個(gè)消息過(guò)濾掉了所以現(xiàn)在只能收到一個(gè)空的消息也就是說(shuō)lParam參數(shù)的值為0所以需要在這里加上一句判斷語(yǔ)句來(lái)判斷一下是否收到了空的消息如果是的話就直接跳過(guò)這次循環(huán)因?yàn)槲覀円呀?jīng)知道了用戶沒(méi)有點(diǎn)擊標(biāo)記點(diǎn)而是點(diǎn)擊了其他地方所以也就沒(méi)有必要再做其他的操作了,接著就是處理WM_LBUTTONDOWN消息了因?yàn)檫@個(gè)消息已經(jīng)被過(guò)濾掉了所以現(xiàn)在只能收到一個(gè)空的消息也就是說(shuō)lParam參數(shù)的值為0所以需要在這里加上一句判斷語(yǔ)句來(lái)判斷一下是否收到了空的消息如果是的話就直接跳過(guò)這次循環(huán)因?yàn)槲覀円呀?jīng)知道了用戶沒(méi)有點(diǎn)擊標(biāo)記點(diǎn)而是點(diǎn)擊了其他地方所以也就沒(méi)有必要再做其他的操作了,接著就是處理WM_LBUTTONDOWN消息了因?yàn)檫@個(gè)消息已經(jīng)被過(guò)濾掉了所以現(xiàn)在只能收到一個(gè)空的消息也就是說(shuō)lParam參數(shù)的值為0所以需要在這里加上一句判斷語(yǔ)句來(lái)判斷一下是否收到了空的消息如果是的話就直接跳過(guò)這次循環(huán)因?yàn)槲覀円呀?jīng)知道了用戶沒(méi)有點(diǎn)擊標(biāo)記點(diǎn)而是點(diǎn)擊了其他地方所以也就沒(méi)有必要再做其他的操作了,接著就是處理WM_LBUTTONDOWN消息了因?yàn)檫@個(gè)消息已經(jīng)被過(guò)濾掉了所以現(xiàn)在只能收到一個(gè)空的消息也就是說(shuō)lParam參數(shù)的值為0所以需要在這里加上一句判斷語(yǔ)句來(lái)判斷一下是否收到了空的消息如果是的話就直接跳過(guò)這次循環(huán)因?yàn)槲覀円呀?jīng)知道了用戶沒(méi)有點(diǎn)擊標(biāo)記點(diǎn)而是點(diǎn)擊了其他地方所以也就沒(méi)有必要再做其他的操作了,接著就是處理WM_LBUTTONDOWN消息了因?yàn)檫@個(gè)消息已經(jīng)被過(guò)濾掉了所以現(xiàn)在只能收到一個(gè)空的消息也就是說(shuō)lParam參數(shù)的值為0所以需要在這里加上一句判斷語(yǔ)句來(lái)判斷一下是否收到了空的消息如果是的話就直接跳過(guò)這次循環(huán)因?yàn)槲覀円呀?jīng)知道了用戶沒(méi)有點(diǎn)擊標(biāo)記點(diǎn)而是點(diǎn)擊了其他地方所以也就沒(méi)有必要再做其他的操作了,接著就是處理WM_LBUTTONDOWN消息了因?yàn)檫@個(gè)消息已經(jīng)被過(guò)濾掉了所以現(xiàn)在只能收到一個(gè)空的消息也就是說(shuō)lParam參數(shù)的值為0所以需要在這里加上一句判斷語(yǔ)句來(lái)判斷一下是否收到了空的消息如果是的話就直接跳過(guò)這次循環(huán)因?yàn)槲覀円呀?jīng)知道了用戶沒(méi)有點(diǎn)擊標(biāo)記點(diǎn)而是點(diǎn)擊了其他地方所以也就沒(méi)有必要再做其他的操作了,接著就是處理WM_LB

本文標(biāo)題:顯示鼠標(biāo)的快捷鍵怎么設(shè)置
鏈接分享:http://m.5511xx.com/article/dhhecgj.html