LONG ChangeDisplaySettings(
LPDEVMODE lpDevMode, // 目標顯示模式結構
DWORD dwFlags // 套用方式旗標
);
| 欄位 | 說明 | 範例值 |
|---|---|---|
| dmSize | 結構大小 (bytes) | sizeof(DEVMODE) |
| dmBitsPerPel | 色彩位元數 | 24 (真彩色) |
| dmPelsWidth | 水平解析度 | 800 |
| dmPelsHeight | 垂直解析度 | 600 |
| dmDisplayFrequency | 重新整理率 | 75 |
| dmFields | 有效欄位標記 | DM_BITSPERPEL \| DM_PELSWIDTH \| DM_PELSHEIGHT |
0:暫時變更(重開機還原)CDS_UPDATEREGISTRY:永久生效(寫入登錄)CDS_TEST:僅測試模式是否支援,不實際套用| 值 | 含義 |
|---|---|
| DISP_CHANGE_SUCCESSFUL | 成功 |
| DISP_CHANGE_RESTART | 需重開機 |
| DISP_CHANGE_FAILED | 失敗 |
| DISP_CHANGE_BADMODE | 模式不支援(如單色螢幕設 256 色) |
VC6.0 → MFC AppWizard (exe) → Dialog based → 專案名 ChangeRes → 全部預設完成。
在對話方塊放置一個按鈕,ID 為 IDC_BTN_TEST,標題「套用 800×600×24bit」。
void CChangeResDlg::OnBtnTest() {
DEVMODE dm = {0};
dm.dmSize = sizeof(DEVMODE);
dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL;
dm.dmPelsWidth = 800;
dm.dmPelsHeight = 600;
dm.dmBitsPerPel = 24;
// 先測試
LONG ret = ChangeDisplaySettings(&dm, CDS_TEST);
if (ret != DISP_CHANGE_SUCCESSFUL) {
AfxMessageBox(_T("顯示卡不支援此模式!"));
return;
}
// 正式套用(暫時)
ret = ChangeDisplaySettings(&dm, 0);
if (ret == DISP_CHANGE_SUCCESSFUL) {
AfxMessageBox(_T("暫時變更成功!重開機還原。"));
// 若需永久生效,再呼叫一次 CDS_UPDATEREGISTRY
ChangeDisplaySettings(&dm, CDS_UPDATEREGISTRY);
} else {
CString msg;
msg.Format(_T("變更失敗,錯誤碼: %d"), ret);
AfxMessageBox(msg);
ChangeDisplaySettings(NULL, 0); // 還原
}
}
EnumDisplaySettings(NULL, i, &dm) 迴圈列舉所有合法模式,避免設定不支援值。EnumDisplayDevices 取得各螢幕裝置名,再針對性設定。DISP_CHANGE_* 碼給予友善提示。requireAdministrator。掌握 ChangeDisplaySettings,讓您的程式擁有「掌控硬體顯示」的超能力!