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

MFC 每日格言功能實現:讀取 tips.txt 顯示對話框、支援自動/手動、上下翻頁

     編輯:程式設計疑難解答

需求

  • 啟動時自動彈出「每日格言」對話框。
  • 選單項「幫助 → 每日格言」手動打開。
  • 格言存儲於 tips.txt,每行一條。
  • 對話框提供下一條/上一條按鈕翻頁。

實現步驟

  1. 資源視圖添加對話框資源 IDD_TIP_OF_DAY,包含靜態文本、上一條/下一條按鈕、勾選框「啟動時顯示」。
  2. 建立類 CTipOfDayDlg : public CDialogEx。
  3. 成員變數:CStringArray m_tips; int m_currentIndex; bool m_showOnStartup;
  4. OnInitDialog 讀取 tips.txt 填充 m_tips,顯示隨機或順序條目。
  5. 按鈕處理:m_currentIndex = (m_currentIndex + 1) % m_tips.GetSize() 更新文本。
  6. 勾選框狀態寫入註冊表/INI 檔,CWinApp::GetProfileInt 讀取決定啟動時是否 DoModal()。

核心代碼片段

BOOL CTipOfDayDlg::OnInitDialog() {
    CDialogEx::OnInitDialog();
    CStdioFile file;
    if (file.Open(_T("tips.txt"), CFile::modeRead)) {
        CString line;
        while (file.ReadString(line)) m_tips.Add(line);
        file.Close();
    }
    if (m_tips.GetSize() == 0) m_tips.Add(_T("暫無格言"));
    m_currentIndex = rand() % m_tips.GetSize();
    UpdateTipText();
    return TRUE;
}

void CTipOfDayDlg::OnNext() {
    m_currentIndex = (m_currentIndex + 1) % m_tips.GetSize();
    UpdateTipText();
}
void CTipOfDayDlg::OnPrev() {
    m_currentIndex = (m_currentIndex - 1 + m_tips.GetSize()) % m_tips.GetSize();
    UpdateTipText();
}
void CTipOfDayDlg::UpdateTipText() {
    GetDlgItem(IDC_STATIC_TIP)->SetWindowText(m_tips[m_currentIndex]);
}

參考開源實現

CodeProject: Improved Tip of the Day Dialog 含完整源碼、註冊表持久化、RichEdit 支援。

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