首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VC++ 6.0 登錄對話框實現:WS_POPUP 模式 + 默認值讀取

     編輯:程式設計綜合問答

需求:對話框登錄界面,含用戶名/密碼輸入框,帶默認值,無標題欄邊框。

實現步驟

  1. 資源編輯器新建對話框 (IDD_LOGIN)。
  2. 2. 屬性:Style = Popup,Border = None (去標題欄/邊框)。 3. 放置兩個 Static (標籤)、兩個 Edit Control (用戶名/密碼),密碼框屬性 Password = True。 4. 兩個 Button (登錄/取消)。 5. 類向導為 Edit Control 添加 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 擴大拖動區域,即可實現專業登錄界面。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved