// 彈出
mciSendString(_T("Set CDAudio Door Open Wait"), NULL, 0, NULL);
// 關閉
mciSendString(_T("Set CDAudio Door Closed Wait"), NULL, 0, NULL);
// 關機/重啟 (Win9x/NT 通用)
OSVERSIONINFO osvi = { sizeof(osvi) };
GetVersionEx(&osvi);
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) {
// NT 系列需提權 SE_SHUTDOWN_NAME,建議用 ExitWindowsEx + 權限調整
ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0); // 或 EWX_REBOOT
} else {
ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0); // Win9x
}
// 顯示系統關機對話框 (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);
}
LOGFONT lf = {0}; lf.lfCharSet = DEFAULT_CHARSET;
CClientDC dc(this);
::EnumFontFamiliesEx(dc, &lf,
(FONTENUMPROC)[](LPENUMLOGFONT le, LPNEWTEXTMETRIC, DWORD, LPARAM lp) -> int {
((CListBox*)lp)->AddString(le->elfLogFont.lfFaceName);
return 1;
}, (LPARAM)&m_fontList, 0);
// 檢查視窗標題/類別名
if (FindWindow(NULL, _T("MyAppTitle")) || FindWindow(_T("MyWndClass"), NULL)) {
return FALSE; // 已有實例運行,直接退出
}
CPoint pt; GetCursorPos(&pt); // pt.x, pt.y 為螢幕絕對座標
void CMyDlg::OnContextMenu(CWnd* pWnd, CPoint pt) {
CMenu menu; menu.LoadMenu(IDR_MY_POPUP);
CMenu* pPopup = menu.GetSubMenu(0);
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this);
}
CWnd* pMain = AfxGetMainWnd();
if (bHide) {
pMain->SetMenu(NULL); pMain->DrawMenuBar(); bHide = FALSE;
} else {
CMenu menu; menu.LoadMenu(IDR_MAINFRAME);
pMain->SetMenu(&menu); pMain->DrawMenuBar(); bHide = TRUE;
menu.Detach(); // 避免析構銷毀 HMENU
}
HICON hIcon = ExtractIcon(AfxGetInstanceHandle(), _T("Notepad.exe"), 0);
if (hIcon && hIcon != (HICON)-1) {
pDC->DrawIcon(10, 10, hIcon);
DestroyIcon(hIcon);
}
BOOL AdjustPos(CRect* pRect) {
CRect wa; SystemParametersInfo(SPI_GETWORKAREA, 0, &wa, 0);
const int EDGE = 10; // 吸附閾值
BOOL moved = FALSE;
if (pRect->left < wa.left + EDGE && pRect->left != wa.left) {
pRect->OffsetRect(wa.left - pRect->left, 0); moved = TRUE;
}
if (pRect->top < wa.top + EDGE && pRect->top != wa.top) {
pRect->OffsetRect(0, wa.top - pRect->top); moved = TRUE;
}
if (pRect->right > wa.right - EDGE && pRect->right != wa.right) {
pRect->OffsetRect(wa.right - pRect->right, 0); moved = TRUE;
}
if (pRect->bottom > wa.bottom - EDGE && pRect->bottom != wa.bottom) {
pRect->OffsetRect(0, wa.bottom - pRect->bottom); moved = TRUE;
}
return moved;
}
// OnMoving
void CMyDlg::OnMoving(UINT fwSide, LPRECT pRect) {
CRect r(pRect); if (AdjustPos(&r)) *pRect = r;
CDialog::OnMoving(fwSide, pRect);
}
CMenu* pSys = GetSystemMenu(FALSE);pSys->AppendMenu(MF_STRING, ID_MY_ITEM, _T("我的項目"));OnSysCommand 處理 ID_MY_ITEM。涵蓋 VC++ 桌面開發高頻實用片段:MCI 多媒體、ExitWindowsEx/Shell 關機、EnumFontFamiliesEx 字體、FindWindow 單例、GetCursorPos 座標、TrackPopupMenu 右鍵選單、SetMenu 切換、ExtractIcon 圖示、SPI_GETWORKAREA 吸附、GetSystemMenu 系統選單擴展。代碼均為最小可用單元,可直接整合專案。