Windows應用程式對鍵盤與滑鼠的響應

2022-05-02 09:54:09 字數 3052 閱讀 6193

編寫程式: 設計乙個視窗, 當單擊滑鼠左鍵時, 視窗中顯示"left button"; 當單擊滑鼠右鍵時, 視窗中顯示"right button"; 當單擊向上箭頭鍵時, 視窗中顯示"up key"; 當單擊ctrl鍵時, 視窗中顯示"ctrl key"; 當單擊 ctrl+a 鍵時, 視窗中顯示"ctrl+a key":

程式主要**如下:

lresult callback wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)

}

break;

case wm_keyup:

invalidaterect(hwnd,null,true);    //重新整理使用者區。

break;

case wm_char:

}

}

break;

case wm_lbuttondown:

nleftdown=true;

invalidaterect(hwnd,null,true);    //重新整理使用者區。

break;

case wm_rbuttondown:

nrightdown=true;

invalidaterect(hwnd,null,true);    //重新整理使用者區。

break;

case wm_command:

wmid = loword(wparam);

wmevent = hiword(wparam);

// parse the menu selections:

switch (wmid)

break;

case wm_paint:

hdc = beginpaint(hwnd, &ps);

// todo: add any drawing code here...

rect rt;

getclientrect(hwnd, &rt);

xorg=(rt.left+rt.right)/2;

yorg=(rt.top +rt.bottom)/2;

if(nupkeydown == true)

else if(nctrlakeydown == true)

else if(nctrlkeydown == true&&nctrlakeydown == false)

else if(nleftdown == true)

else if(nrightdown == true)

//drawtext(hdc, lpstring, _tcsclen(lpstring), &rt, dt_center);

endpaint(hwnd, &ps);

break;

case wm_destroy:

postquitmessage(0);

break;

default:

return defwindowproc(hwnd, message, wparam, lparam);

}

return 0;

}

編譯並除錯程式

程式執行結果執行結果如下圖:

單擊滑鼠左鍵

單擊滑鼠右鍵

單擊向上箭頭

單擊ctrl鍵

單擊ctrl+a

剛開始重新整理客戶區時使用

invalidaterect(hwnd,null,false);

結果導致背景客戶區背景不更新,輸出的文字重疊,了解了invalidaterect()的使用方式後,將語句改為

invalidaterect(hwnd,null,true);

即成功解決了問題;

windows應用程式框架

windows作業系統是一種圖形化介面 windows程式設計是一種完全不同於傳統dos方式的程式設計方式 其內部執行原理為事件驅動的程式設計模式,主要是基於訊息的,當使用者需要完成某種功能時,呼叫作業系統的某種支援 windows api windows產生的任何資源 要占用或大或小一塊記憶體 作...

Windows服務應用程式

專案中要實現乙個定時任務的需求,目前c 定時任務的框架有很多比如hangfire quartz.net等,其中hangfire提供視覺化的面板 重試操作並且其可以寄宿在各種宿主應用程式中。但是專案是要定時獲取其他系統資料到本系統,功能簡單,所以為了不引入太複雜的框架和增加學習成本的考慮,使用微軟提供...

WINDOWS窗體應用程式與WPF應用程式的區別?

windows窗體應用程式與wpf應用程式的區別?用wpf更容易做的漂亮 感覺有以下幾個大區別 wpf的執行緒模型和winform的執行緒模型不同 wpf到處用到資料繫結,winform在列表中才用的多 wpf支援3d,winform本身沒有,需要引入託管的dx wpf有現成的動畫機制,winfor...