需求:對話框登錄界面,含用戶名/密碼輸入框,帶默認值,無標題欄邊框。
CString 變量 (m_user, m_pwd)。
6. OnInitDialog 讀取默認值 (註冊表/INI/配置文件) 設置變量,UpdateData(FALSE) 顯示。
7. 登錄按鈕處理:UpdateData(TRUE) 獲取輸入,驗證成功 EndDialog(IDOK)。
BOOL CLoginDlg::OnInitDialog() {
CDialogEx::OnInitDialog();
// 讀取註冊表默認值
CWinApp* pApp = AfxGetApp();
m_user = pApp->GetProfileString(_T("Login"), _T("User"), _T("admin"));
m_pwd = pApp->GetProfileString(_T("Login"), _T("Pwd"), _T(""));
UpdateData(FALSE); // 變量 → 控件
return TRUE;
}
void CLoginDlg::OnBnClickedOk() {
UpdateData(TRUE); // 控件 → 變量
if (Validate(m_user, m_pwd)) {
// 保存默認值 (可選)
AfxGetApp()->WriteProfileString(_T("Login"), _T("User"), m_user);
EndDialog(IDOK);
} else {
AfxMessageBox(_T("用戶名或密碼錯誤"));
}
}
Style=Popup, Border=None 後失去標題欄無法拖動。解決:
// 在對話框類中處理 WM_NCHITTEST
LRESULT CLoginDlg::OnNcHitTest(CPoint point) {
LRESULT hit = CDialogEx::OnNcHitTest(point);
if (hit == HTCLIENT) return HTCAPTION; // 客戶區也當標題欄處理,可拖動
return hit;
}
如需完整項目代碼,請採納答案後私信提供郵箱。
配置 Popup 無邊框對話框 + 註冊表默認值 + HTCAPTION 擴大拖動區域,即可實現專業登錄界面。