編寫程式: 設計乙個視窗, 當單擊滑鼠左鍵時, 視窗中顯示"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...