mciSendString(_T("Set cdAudio door open wait"), NULL, 0, NULL);
mciSendString(_T("Set cdAudio door closed wait"), NULL, 0, NULL);
OSVERSIONINFO osvi = { sizeof(OSVERSIONINFO) };
GetVersionEx(&osvi);
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) // Win9x
{
ExitWindowsEx(EWX_REBOOT, 0); // 參數可改:EWX_LOGOFF, EWX_SHUTDOWN, EWX_POWEROFF
}
else // NT 系列需調整權限
{
// 需啟用 SE_SHUTDOWN_NAME 權限後呼叫 InitiateSystemShutdown
}
typedef int (CALLBACK* SHUTDOWNDLG)(int);
HINSTANCE hInst = LoadLibrary(_T("shell32.dll"));
if (hInst)
{
SHUTDOWNDLG pFn = (SHUTDOWNDLG)GetProcAddress(hInst, (LPSTR)60);
if (pFn) pFn(0);
FreeLibrary(hInst);
}
LOGFONT lf = {0};
lf.lfCharSet = DEFAULT_CHARSET;
CClientDC dc(this);
::EnumFontFamiliesEx(dc.m_hDC, &lf,
(FONTENUMPROC)[](LPENUMLOGFONT lpelf, LPNEWTEXTMETRIC, DWORD, LPARAM lParam) -> int
{
CListBox* pList = (CListBox*)lParam;
pList->AddString(lpelf->elfLogFont.lfFaceName);
return 1;
}, (LPARAM)&m_fontList, 0);
if (FindWindow(NULL, _T("程式標題"))) exit(0);
CPoint pt; GetCursorPos(&pt);
處理 WM_CONTEXTMENU 訊息。
CWnd* pWnd = AfxGetMainWnd();
if (bHide) { pWnd->SetMenu(NULL); pWnd->DrawMenuBar(); bHide = FALSE; }
else { CMenu menu; menu.LoadMenu(IDR_MAINFRAME); pWnd->SetMenu(&menu); pWnd->DrawMenuBar(); bHide = TRUE; menu.Detach(); }
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 rcWork;
SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWork, 0);
const int DETA = 5;
BOOL bMoved = FALSE;
if (pRect->left < rcWork.left + DETA && pRect->left != rcWork.left)
{ pRect->OffsetRect(rcWork.left - pRect->left, 0); bMoved = TRUE; }
if (pRect->top < rcWork.top + DETA && pRect->top != rcWork.top)
{ pRect->OffsetRect(0, rcWork.top - pRect->top); bMoved = TRUE; }
if (pRect->right > rcWork.right - DETA && pRect->right != rcWork.right)
{ pRect->OffsetRect(rcWork.right - pRect->right, 0); bMoved = TRUE; }
if (pRect->bottom > rcWork.bottom - DETA && pRect->bottom != rcWork.bottom)
{ pRect->OffsetRect(0, rcWork.bottom - pRect->bottom); bMoved = TRUE; }
return bMoved;
}
// 在 OnMoving 中呼叫
void CMyWnd::OnMoving(UINT, LPRECT pRect) { CRect r(*pRect); if (AdjustPos(&r)) *pRect = r; }
// OnCreate 中
CMenu* pSysMenu = GetSystemMenu(FALSE);
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_MYITEM, _T("我的選單項"));
// 需在資源符號定義 IDM_MYITEM (0x10 ~ 0xEFFF)
// 開啟郵件
ShellExecute(NULL, _T("open"), _T("mailto:test@example.com"), NULL, NULL, SW_SHOWNORMAL);
// 執行程式
WinExec(_T("notepad.exe"), SW_SHOW);
// 新增
CMenu* pMenu = AfxGetMainWnd()->GetMenu();
pMenu->GetSubMenu(0)->AppendMenu(MF_SEPARATOR);
pMenu->GetSubMenu(0)->AppendMenu(MF_STRING, ID_NEW_ITEM, _T("新項目"));
DrawMenuBar();
// 移除
for (int i = pMenu->GetSubMenu(0)->GetMenuItemCount()-1; i >= 0; i--)
{
CString str; pMenu->GetSubMenu(0)->GetMenuString(i, str, MF_BYPOSITION);
if (str == _T("新項目")) { pMenu->GetSubMenu(0)->DeleteMenu(i, MF_BYPOSITION); break; }
}
DrawMenuBar();
靜態:修改資源 IDR_MAINFRAME 的 16×16 與 32×32 圖示。
動態:AfxGetMainWnd()->SendMessage(WM_SETICON, TRUE, (LPARAM)AfxGetApp()->LoadIcon(IDI_MYICON));
CWnd* pWnd = AfxGetMainWnd();
pWnd->SetWindowText(_T("新標題"));
CMetaFileDC* pMetaDC = new CMetaFileDC();
pMetaDC->CreateEnhanced(GetDC(), NULL, NULL, _T("desc"));
// 繪圖操作...
HENHMETAFILE hMF = pMetaDC->CloseEnhanced();
OpenClipboard(); EmptyClipboard();
SetClipboardData(CF_ENHMETAFILE, hMF);
CloseClipboard();
delete pMetaDC;
// 寫入
CString text = _T("Hello");
if (OpenClipboard())
{
HGLOBAL hMem = GlobalAlloc(GMEM_DDESHARE, (text.GetLength()+1)*sizeof(TCHAR));
LPTSTR pBuf = (LPTSTR)GlobalLock(hMem);
_tcscpy(pBuf, text);
GlobalUnlock(hMem);
EmptyClipboard(); SetClipboardData(CF_UNICODETEXT, hMem);
CloseClipboard();
}
// 讀取
if (OpenClipboard())
{
HGLOBAL hMem = GetClipboardData(CF_UNICODETEXT);
if (hMem) { LPTSTR pBuf = (LPTSTR)GlobalLock(hMem); /* 使用 pBuf */ GlobalUnlock(hMem); }
CloseClipboard();
}
void OnCaptureScreen()
{
ShowWindow(SW_HIDE);
RECT rc = {0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)};
HBITMAP hBmp = CopyScreenToBitmap(&rc);
if (OpenClipboard()) { EmptyClipboard(); SetClipboardData(CF_BITMAP, hBmp); CloseClipboard(); }
ShowWindow(SW_SHOW);
}
HBITMAP CopyScreenToBitmap(LPRECT lpRect)
{
HDC hScrDC = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
HDC hMemDC = CreateCompatibleDC(hScrDC);
int w = lpRect->right - lpRect->left, h = lpRect->bottom - lpRect->top;
HBITMAP hBmp = CreateCompatibleBitmap(hScrDC, w, h);
HBITMAP hOld = (HBITMAP)SelectObject(hMemDC, hBmp);
BitBlt(hMemDC, 0, 0, w, h, hScrDC, lpRect->left, lpRect->top, SRCCOPY);
SelectObject(hMemDC, hOld);
DeleteDC(hScrDC); DeleteDC(hMemDC);
return hBmp;
}
void ShowBmpInStatic()
{
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_IMAGE);
HBITMAP hBmp = (HBITMAP)LoadImage(AfxGetInstanceHandle(), _T("MM.bmp"),
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
CBitmap bmp; bmp.Attach(hBmp);
BITMAP bm; bmp.GetBitmap(&bm);
CDC dcMem; dcMem.CreateCompatibleDC(GetDC());
CBitmap* pOld = dcMem.SelectObject(&bmp);
CRect rc; pStatic->GetClientRect(&rc);
pStatic->GetDC()->StretchBlt(0, 0, rc.Width(), rc.Height(),
&dcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
dcMem.SelectObject(pOld);
}