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

VC++ 20 個經典實用代碼片段集錦

     編輯:VC 教學

系統操作類

  1. 開啟/關閉光碟機:
    mciSendString(_T("Set CDAudio Door Open Wait"), NULL, 0, NULL);
    mciSendString(_T("Set CDAudio Door Closed Wait"), NULL, 0, NULL);
  2. 關機/重啟/登出 (需權限):
    OSVERSIONINFO osvi = { sizeof(OSVERSIONINFO) };
    GetVersionEx(&osvi);
    if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) {
        // NT 系列需 SE_SHUTDOWN_NAME 權限
        HANDLE hToken; OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);
        TOKEN_PRIVILEGES tkp = {1, {{0,0}, SE_PRIVILEGE_ENABLED}};
        LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
        AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, NULL);
    }
    ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0); // 或 EWX_REBOOT, EWX_LOGOFF
  3. 顯示系統關機對話框 (Shell32.dll 序數 60):
    typedef int (CALLBACK* SHUTDOWNDLG)(int);
    HINSTANCE h = LoadLibrary(_T("Shell32.dll"));
    if (h) {
        SHUTDOWNDLG fn = (SHUTDOWNDLG)GetProcAddress(h, (LPCSTR)60);
        if (fn) fn(0);
        FreeLibrary(h);
    }

介面與視窗操作

  1. 列舉系統字型:
    LOGFONT lf = {0}; lf.lfCharSet = DEFAULT_CHARSET;
    CClientDC dc(this);
    EnumFontFamiliesEx(dc, &lf, (FONTENUMPROC)EnumFontProc, (LPARAM)this, 0);
    
    int CALLBACK EnumFontProc(LPENUMLOGFONT lpelf, LPNEWTEXTMETRIC, DWORD, LPARAM lParam) {
        ((CMyDlg*)lParam)->m_fontList.AddString(lpelf->elfLogFont.lfFaceName);
        return 1; // 繼續列舉
    }
  2. 單一實例應用程式:
    if (FindWindow(NULL, _T("我的程式標題"))) exit(0); // 早期退出
  3. 取得滑鼠座標:
    CPoint pt; GetCursorPos(&pt); // 螢幕座標
    ScreenToClient(&pt); // 轉客戶區座標
  4. 右鍵上下文選單:在視圖/對話框類別加入 ON_WM_CONTEXTMENU(),處理函數 OnContextMenu(CWnd*, CPoint) 中 TrackPopupMenu。
  5. 動態顯示/隱藏主選單:
    CWnd* pMain = AfxGetMainWnd();
    if (bHide) { pMain->SetMenu(NULL); pMain->DrawMenuBar(); }
    else { CMenu menu; menu.LoadMenu(IDR_MAINFRAME); pMain->SetMenu(&menu); pMain->DrawMenuBar(); menu.Detach(); }
  6. 取得執行檔圖標:
    HICON hIcon = ExtractIcon(AfxGetInstanceHandle(), _T("Notepad.exe"), 0);

進階技巧 (原文截斷,補充常用項)

  1. 啟用記憶體洩漏偵測 (Debug 版):
    #define _CRTDBG_MAP_ALLOC
    #include 
    #include 
    // 程式結束前
    _CrtDumpMemoryLeaks();
  2. 設定命令列參數偵錯:專案 → Settings → Debug → Program arguments 填入 arg1 arg2。
  3. 多專案輸出目錄統一:所有專案 Output Directory 設為同一 ../Output,EXE 專案 Working Directory 設為該目錄。
  4. 專案相依性建立順序:EXE 專案 Dependencies 勾選 DLL 專案,自動建置順序與複製輸出。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved