C语言在控制台上实现鼠标操作的方法
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                C语言在控制台上实现鼠标操作的方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                文章目錄
- 了解windows庫函數
- 了解句柄
- 實現思路與代碼
在制作面向用戶系統時,我們往往需要設置除輸入參數外更為靈活的操作方式,例如鼠標點擊、按鍵按下(無阻塞輸入)等;同時,我們需要制作更為精美的 UI而不是簡陋的黑白界面。然而,純C語言本身并不提供這些函數,為實現這些操作,我們需要調用 windows.h庫中的函數(當然大前提是用戶使用 windows系統)。
為實現鼠標操作,我們所涉及到的有關函數有:
了解windows庫函數
接下來還有一些windows.h庫中的特殊函數:
了解句柄
接下來說明句柄的概念:句柄是一種特殊指針(另一種說法為一種整型),用于標識應用程序中的對象(如窗口,按鈕,圖標等)。當前系統中每一個進程,每一個控件,都根據其虛擬內存地址擁有其對應的唯一句柄。于是,我們可以通過一個句柄找到對應的對象來指定操作。
知道以上函數后,我們就可以正式編寫程序了。
實現思路與代碼
思路:通過一個循環反復檢測鼠標是否按下,如果按下,則檢測當前鼠標光標在控制臺中所對應的坐標,通過對控制臺中UI的坐標進行對應來判斷操作。值得一提的是,windows.h庫中沒有直接返回鼠標光標在控制臺窗口中坐標的函數,于是我們通過得到鼠標光標在桌面中的坐標和控制臺窗口在桌面中的坐標,來計算鼠標光標與控制臺窗口的相對位置。
#include<stdio.h> #include<windows.h>void MouseOpreate(int *x,int *y); int main(){...SetConsoleTitle("憨憨");//設定窗口標題...int x,y;MouseOpreate(&x,&y);if((0<=x && x<=100)&&(0<=y && y<=20)){//通過UI在程序中對應的坐標指定操作...}else if(...){...} } void MouseOpreate(int *x,int *y){POINT *ptrpos;//聲明POINT結構體類存儲鼠標坐標LPRECT rect;//聲明LPRECT結構體指針存儲窗口坐標信息HWND hwnd=FindWindow(NULL,"憨憨");//根據上述設定的標題查找句柄,第一個形參設為NULL意味著查找系統中所有句柄ptrpos=(POINT*)malloc(sizeof(POINT)+64);rect=(LPRECT*)malloc(sizeof(LPRECT)+64);//為結構體指針分配內存空間for(;;){Sleep(500);//通過休眠指定循環周期為500毫秒if(GetAsyncKeyState(VK_LBUTTON)){//如果鼠標左鍵按下,其中VK_LBUTTON是windows.h庫中定義的宏,對應鼠標左鍵對應的ASCII值GetWindowRect(hwnd,rect);//根據查找標題"憨憨"得到的句柄返回對于窗口的坐標并存儲在rect中GetCursorPos(ptrpos);//返回鼠標對應的坐標并存儲在ptrpos中*x=ptrpos->x-rect->left;//鼠標橫坐標-控制臺窗口左端橫坐標得到鼠標相對控制臺窗口的橫坐標*y=ptrpos->y-rect->top;//同理得到鼠標相對的縱坐標break;//得到坐標后跳出循環}}接下來,我們只需要在檢測位置畫上對應的UI,就可以完成判定了。
總結
以上是生活随笔為你收集整理的C语言在控制台上实现鼠标操作的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 迁移聊天记录到Teams
- 下一篇: 想练字要怎么选择字体?
