HICON hIcon = AfxGetApp()->LoadIcon(IDI_MYICON);
ASSERT(hIcon);
AfxGetMainWnd()->SendMessage(WM_SETICON, TRUE, (LPARAM)hIcon); // 大圖示
AfxGetMainWnd()->SendMessage(WM_SETICON, FALSE, (LPARAM)hIcon); // 小圖示
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {
cs.style &= ~WS_MAXIMIZEBOX; // 移除最大化按鈕
cs.cx = GetSystemMetrics(SM_CXSCREEN) / 2;
cs.cy = GetSystemMetrics(SM_CYSCREEN) / 2;
cs.x = cs.y = 0; // 左上角座標
return CMDIFrameWnd::PreCreateWindow(cs);
}
// 相對父視窗置中
CenterWindow();
// 相對螢幕置中
CenterWindow(CWnd::GetDesktopWindow());
// 主視窗置中
AfxGetMainWnd()->CenterWindow();
// SDI/對話框:InitInstance 中
m_nCmdShow = SW_SHOWMAXIMIZED; // 或 SW_SHOWMINIMIZED, SW_SHOWNORMAL
// MDI 子視窗:AppWizard Advanced → MDI 子視窗風格勾選最大化
// 或衍生類中
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs) {
cs.style |= WS_MAXIMIZE; // 或 WS_MINIMIZE
return CMDIChildWnd::PreCreateWindow(cs);
}
// 或 OnInitialUpdate
void CMyView::OnInitialUpdate() {
CView::OnInitialUpdate();
GetParentFrame()->ShowWindow(SW_SHOWMAXIMIZED);
}
BOOL CMainFrame::OnQueryOpen() {
return FALSE; // 攔截 WM_QUERYOPEN,拒絕還原
}
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) {
lpMMI->ptMinTrackSize = CPoint(400, 300); // 最小追蹤尺寸
lpMMI->ptMaxTrackSize = CPoint(800, 600); // 最大追蹤尺寸
// 固定大小:兩者設為相同值
CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
ShowWindow(SW_HIDE); // 隱藏
ShowWindow(SW_SHOW); // 顯示
// 結合 FindWindow 控制其他應用視窗
HWND h = FindWindow(_T("Notepad"), NULL);
if (h) ::ShowWindow(h, SW_HIDE);
// 方法一:SetWindowPos (推薦)
pWnd->SetWindowPos(&wndTopMost, 0,0,0,0, SWP_NOMOVE|SWP_NOSIZE);
// 方法二:切換置頂狀態
void ToggleTopMost(CWnd* pWnd) {
ASSERT_VALID(pWnd);
pWnd->SetWindowPos(
(pWnd->GetExStyle() & WS_EX_TOPMOST) ? &wndNoTopMost : &wndTopMost,
0,0,0,0, SWP_NOMOVE|SWP_NOSIZE);
}
LRESULT CMyDlg::OnNcHitTest(CPoint point) {
LRESULT hit = CDialog::OnNcHitTest(point);
if (hit == HTCLIENT) return HTCAPTION; // 告訴系統點在標題列
return hit;
}
// 僅對話框/基於對話框應用有效;一般視窗需處理 WM_NCHITTEST
void CMainFrame::OnUpdateFrameTitle(BOOL bAddToTitle) {
CFrameWnd::OnUpdateFrameTitle(bAddToTitle);
SetWindowText(_T("自訂標題 - 我的應用程式"));
}
| 旗標 | 效果 |
|---|---|
| WS_MAXIMIZEBOX | 最大化按鈕 |
| WS_MINIMIZEBOX | 最小化按鈕 |
| WS_SYSMENU | 系統選單 (含關閉鈕) |
| WS_CAPTION | 標題列 (WS_BORDER | WS_DLGFRAME) |
| WS_THICKFRAME | 可調整大小邊框 |
| WS_EX_TOPMOST | 擴展風格:永久置頂 |
| WS_EX_TOOLWINDOW | 工具視窗 (無任務列按鈕、細標題列) |
視窗行為控制核心在於:創建前用 `PreCreateWindow` 改 `CREATESTRUCT`、運行中用 `ModifyStyle`/`SetWindowPos`、`OnGetMinMaxInfo` 限制尺寸、`OnNcHitTest` 擴展拖動區域。掌握這幾個切入點,即可靈活應對各種視窗定制需求。