1.獲取客戶區矩形區域
RECT cliRect;
GetClientRect(hWnd, &cliRect);
2.獲取窗口上下文句柄
HDC hdc = GetDC(hWnd);
//....
ReleaseDC(hWnd, hdc);
3.LPWSTR 與 char * 互轉
int32_t WToChar(LPWSTR szWstr, char szCstr[], const int32_t chrLen) { int iLength = WideCharToMultiByte(CP_ACP, 0, szWstr, -1, NULL, 0, NULL, NULL); return WideCharToMultiByte(CP_ACP, 0, szWstr, -1, szCstr, iLength, NULL, NULL); } int32_t CharToW(const char* szCstr, WCHAR szWstr[], const int32_t wstrLen) { int iLength = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szCstr, -1, NULL, 0); return MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szCstr, -1, szWstr, iLength); }
4.獲取帶顏色的畫刷
COLORREF colorObs = 0x9D9D9D;
HBRUSH hbObs = CreateSolidBrush(colorObs);
//....
DeleteObject(hbObs);
5.繪制矩形
Rectangle(hdc ,left,top,right,bottom);
6.填充矩形
FillRect(hdc, &rect, hbObs);
7.刷新整個窗口
InvalidateRect(hWnd, NULL, TRUE);
8.設置窗口標題
SetWindowText(hWnd, szText);
9.打開文件對話框
bool OpenFileDialog(HWND hWnd, char szFileName[MAX_PATH]) { WCHAR szFile[MAX_PATH] = { 0 }; OPENFILENAME ofn = { OPENFILENAME_SIZE_VERSION_400 }; ofn.hwndOwner = hWnd; // 過濾器,以\0相隔: 顯示名稱\0過濾器\0顯示名稱\0過濾器\0\0 ofn.lpstrFilter = TEXT("txt(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0"); ofn.lpstrFile = szFile; ofn.nMaxFile = sizeof(szFile); ofn.lpstrTitle = TEXT("選擇文件"); ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST; TCHAR szCurDir[MAX_PATH]; GetCurrentDirectory(sizeof(szCurDir), szCurDir); ofn.lpstrInitialDir = szCurDir;//設置對話框顯示的初始目錄 BOOL bOk = GetOpenFileName(&ofn); if (!bOk) { return false; } //MessageBox(NULL, ofn.lpstrFile, TEXT("Tips_Yes"), MB_OK); memset(szFileName, 0, sizeof(szFileName)); WToChar(ofn.lpstrFile, szFileName, sizeof(szFileName)); return true; }
10.保存文件對話框
bool SaveFileDialog(HWND hWnd, char szFileName[MAX_PATH]) { WCHAR szFile[MAX_PATH] = { 0 }; OPENFILENAME ofn = { OPENFILENAME_SIZE_VERSION_400 }; ofn.hwndOwner = hWnd; // 過濾器,以\0相隔: 顯示名稱\0過濾器\0顯示名稱\0過濾器\0\0 ofn.lpstrFilter = TEXT("txt(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0"); ofn.lpstrFile = szFile; ofn.nMaxFile = sizeof(szFile); ofn.lpstrTitle = TEXT("選擇文件"); ofn.Flags = OFN_OVERWRITEPROMPT; // 覆蓋提示 TCHAR szCurDir[MAX_PATH]; GetCurrentDirectory(sizeof(szCurDir), szCurDir); ofn.lpstrInitialDir = szCurDir;//設置對話框顯示的初始目錄 BOOL bOk = GetSaveFileName(&ofn); if (!bOk) { return false; } //MessageBox(NULL, ofn.lpstrFile, TEXT("Tips_Yes"), MB_OK); memset(szFileName, 0, sizeof(szFileName)); WToChar(ofn.lpstrFile, szFileName, sizeof(szFileName)); return true; }
11.獲取或設置控件文字
GetDlgItemText(hDlg, IDC_EDIT_ROW, szTRow, 64); SetDlgItemText(hDlg, IDC_EDIT_COL, szTCol);
12.獲取光標位置
POINT pt;
GetCursorPos(&pt);
13.屏幕坐標與窗口坐標之間的轉化
ScreenToClient(hWnd, &pt);
ClientToScreen(hWnd, &pt);
14.設置窗口位置和大小
SetWindowPos(hWnd, NULL, nX, nY, nWidth, nHeight, false);
15. 打開右鍵菜單
void UIManager::OnContextMenu(const HWND &hWnd, const RECT &cliRect, const POINT &clickPt) { POINT tmpt = clickPt; ScreenToClient(hWnd, &tmpt); if (PtInRect(&cliRect, tmpt) == FALSE){ return; } HMENU hroot = LoadMenu((HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), MAKEINTRESOURCE(IDR_CONTEXT)); if (!hroot){ return; } HMENU hpop = GetSubMenu(hroot, 0); if (!hpop){ return; } ClientToScreen(hWnd, &tmpt); //顯示快捷菜單 TrackPopupMenu(hpop, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RIGHTBUTTON, tmpt.x, tmpt.y, 0, hWnd, NULL); // 用完后要銷毀菜單資源 DestroyMenu(hroot); }
