日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【MFC】状态栏随对话框的改变而改变

發布時間:2024/4/24 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【MFC】状态栏随对话框的改变而改变 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 案例概述
    • 02. 開發環境
    • 03. 關鍵技術
    • 04. 程序設計
    • 05. 秘笈心法
    • 06. 源碼下載
    • 07. 附錄

01. 案例概述

在對話框中創建一個狀態欄,當窗口大小發生改變時,默認情況下,狀態欄是不會發生改變的。但在實際應用中,需要狀態欄隨對話框大小改變而改變。效果如下圖所示。

02. 開發環境

系統環境:Windows 10

開發環境:Visual Studio 2019

03. 關鍵技術

對話框的大小發生變化后,對話框類的OnSize方法可以接收到消息,在OnSize方法內根據窗體改變后的大小來重新設置狀態欄的大小。狀態欄大小的改變使用CStatusBar類的SetPaneInfo方法實現。

SetPaneInfo方法

該方法用來設置指定狀態欄標識面板的ID屬性值、樣式和寬度。語法如下:

void SetPaneInfo( int nIndex, UINT nID, UINT nStyle, int cxWidth );參數: nIndex 要設置其風格的指示器窗格的索引。 nID 該指示器窗格的新ID。 nStyle 該指示器窗格的新風格。 cxWidth 該指示器窗格的新寬度。 說明: 此成員函數用來設置指示器窗格的新ID,風格和寬度。 下面的指示器風格是被支持的: · SBPS_NOBORDERS 在窗格周圍沒有3-D邊框。 · SBPS_POPOUT 反轉邊界以使文字“凸出來”。 · SBPS_DISABLED 不繪制文本。 · SBPS_STRETCH 擴大窗格以填充不用的空白空間。沒有狀態條只能有一個窗格具有這種風格。 · SBPS_NORMAL 沒有擴展,邊界或“凸出來”。

04. 程序設計

(1)新建一個基于對話框的工程

(2)在CMy1StatusDlg類中聲明CStatusBar類對象。

(3)為CMy1StatusDlg類添加WM_SIZE消息的處理函數,在該函數中實現對狀態欄大小的改變,函數實現代碼如下。

BEGIN_MESSAGE_MAP(CMy1StatusDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_TIMER()ON_WM_SIZE() END_MESSAGE_MAP()// CMy1StatusDlg 消息處理程序BOOL CMy1StatusDlg::OnInitDialog() {CDialogEx::OnInitDialog();// 將“關于...”菜單項添加到系統菜單中。// IDM_ABOUTBOX 必須在系統命令范圍內。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != nullptr){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 設置此對話框的圖標。 當應用程序主窗口不是對話框時,框架將自動// 執行此操作SetIcon(m_hIcon, TRUE); // 設置大圖標SetIcon(m_hIcon, FALSE); // 設置小圖標m_StatusBar.CreateEx(this, SBARS_SIZEGRIP);UINT panels[6];CRect rect;GetClientRect(rect);int width = rect.Width() / 6;m_StatusBar.SetIndicators(panels, 6);for (int i = 0; i < 6; i++){m_StatusBar.SetPaneInfo(i, 1000 + i, 0, width);}//設置面板信息m_StatusBar.SetPaneText(0, TEXT("提示"));m_StatusBar.SetPaneText(2, TEXT("當前用戶"));m_StatusBar.SetPaneText(4, TEXT("當前時間"));//獲取當前時間CTime time;time = CTime::GetCurrentTime();m_StatusBar.SetPaneText(5, time.Format("%H:%M:%S"));RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);//設置定時器SetTimer(1, 1000, NULL);return TRUE; // 除非將焦點設置到控件,否則返回 TRUE }void CMy1StatusDlg::OnTimer(UINT_PTR nIDEvent) {// TODO: 在此添加消息處理程序代碼和/或調用默認值CTime time;time = CTime::GetCurrentTime();m_StatusBar.SetPaneText(5, time.Format("%H:%M:%S"));CDialogEx::OnTimer(nIDEvent); }void CMy1StatusDlg::OnSize(UINT nType, int cx, int cy) {CDialogEx::OnSize(nType, cx, cy);//判斷狀態欄是否被創建if (IsWindow(m_StatusBar.m_hWnd)){CRect rect;GetClientRect(rect);int width = rect.Width() / 6;for (int i = 0; i < 6; i++){m_StatusBar.SetPaneInfo(i, 1000 + i, 0, width);}RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);}// TODO: 在此處添加消息處理程序代碼 }

05. 秘笈心法

應用程序中控件位置的變化

在開發應用程序過程中,將控件設置為隨對話框的改變而改變,可以增加應用程序的靈活性,例如將編輯框設置為隨對話框的改變而改變,當編輯框中顯示的數據比較多時,通過改變對話框的大小來讓編輯框顯示更多的數據,同樣狀態欄隨對話框大小改變而改變可以增加程序的美觀程度,如果對話框大小發生變化了,狀態欄還以原有的大小和位置顯示在哪里,會造成界面的混亂。

06. 源碼下載

下載:【MFC】狀態欄隨對話框的改變而改變.rar

07. 附錄

參考: 《Visual C++從入門到精通(項目案例版)》

總結

以上是生活随笔為你收集整理的【MFC】状态栏随对话框的改变而改变的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。