首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 實用技巧總結(一):核心物件存取、資源管理與視窗客製化

     編輯:VC 教學

(1) 取得應用程式主視窗指標

主視窗指標儲存於 CWinThread::m_pMainWnd,透過全域函式存取:

AfxGetMainWnd()->ShowWindow(SW_SHOWMAXIMIZED); // 最大化主視窗

(2) 取得應用程式完整路徑

使用 GetModuleFileName 取得含檔名的完整路徑,再移除檔名部分:

TCHAR szExePath[MAX_PATH];
GetModuleFileName(NULL, szExePath, MAX_PATH);
// 配合 PathRemoveFileSpec 或手動截斷取得目錄

(3) 取得其他程式的圖示

兩種常用方法:

  1. SHGetFileInfo:可同時取得大/小圖示、檔案屬性、類型描述。
  2. ExtractIcon:直接從可執行檔/圖示檔提取指定索引圖示。
// 範例:在視窗左上角繪製 Notepad 圖示
SHFILEINFO sfi;
if (SHGetFileInfo(_T("notepad.exe"), 0, &sfi, sizeof(sfi), SHGFI_ICON)) {
    pDC->DrawIcon(10, 10, sfi.hIcon);
    DestroyIcon(sfi.hIcon); // 釋放圖示控制代碼
}

提示:系統路徑應用 GetWindowsDirectory、GetSystemDirectory 取得,避免硬編碼。

(4) 取得常用系統目錄

目錄API參數順序注意
Windows 目錄GetWindowsDirectory緩衝區指標在前,長度在後
System 目錄GetSystemDirectory同上
暫存目錄GetTempPath長度在前,緩衝區在後
目前工作目錄GetCurrentDirectory長度在前,緩衝區在後

(5) 自訂訊息的定義與處理

  1. 定義訊息編號:#define WM_MY_MESSAGE (WM_USER + 100)(建議 ≥ WM_USER+100 避免衝突)。
  2. 訊息處理函式簽章:LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)。
  3. 訊息對映巨集:ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)。

(6) 動態變更視窗圖示

發送 WM_SETICON 訊息(原文誤寫為 WM_SECTION):

HICON hIcon = AfxGetApp()->LoadIcon(IDI_MYICON);
ASSERT(hIcon);
AfxGetMainWnd()->SendMessage(WM_SETICON, TRUE, (LPARAM)hIcon);  // 大圖示
AfxGetMainWnd()->SendMessage(WM_SETICON, FALSE, (LPARAM)hIcon); // 小圖示

(7) 修改視窗預設風格

覆寫 PreCreateWindow,調整 CREATESTRUCT:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {
    cs.style &= ~WS_MAXIMIZEBOX;           // 移除最大化按鈕
    cs.x = cs.y = 0;                       // 位置
    cs.cx = GetSystemMetrics(SM_CXSCREEN)/2; // 寬度螢幕一半
    cs.cy = GetSystemMetrics(SM_CYSCREEN)/2; // 高度螢幕一半
    return CMDIFrameWnd::PreCreateWindow(cs);
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved