中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

網上服裝定制網站seo優(yōu)化軟件有哪些

網上服裝定制網站,seo優(yōu)化軟件有哪些,東莞大朗網絡推廣外包,wordpress 主題放哪目錄 一、對話款基本認識 二、對話框項目創(chuàng)建 三、控件操作 四、對話框創(chuàng)建和顯示 模態(tài)對話框 非模態(tài)對話框 五、動態(tài)創(chuàng)建按鈕 六、訪問控件 控件添加控制變量 訪問對話框 操作對話框 SendMessage() 七、對話框伸縮功能實現(xiàn) 八、對話框小項目-逃跑按鈕 九、小項…

目錄

一、對話款基本認識

二、對話框項目創(chuàng)建

三、控件操作

四、對話框創(chuàng)建和顯示?

模態(tài)對話框

非模態(tài)對話框

五、動態(tài)創(chuàng)建按鈕

六、訪問控件

控件添加控制變量

訪問對話框

操作對話框

SendMessage()

七、對話框伸縮功能實現(xiàn)

八、對話框小項目-逃跑按鈕

九、小項目


一、對話款基本認識

對話框是與用戶進行交互的控件,如文件對話框,字體對話框,顏色對話框等,一般用于告示,提醒等。對話框就是一個窗口,它不僅可以接收消息,而且還可以被移動和關閉,甚至可以在它的客戶區(qū)中進行繪圖。相當于一個窗口,在它上面能夠旋轉各種標準控件和擴展控件。都是由CWnd類派生來。

Windows應用程序(win桌面應用程序)工作的基本流程是從用戶那里得到數據,經過相應的處理之后,先把處理結果輸出到屏幕,打印機或者其他輸出設備。這就需要用到Windows應用程序的用戶接口對話框。

常用對話框

這些控件也是對話框

二、對話框項目創(chuàng)建

創(chuàng)建MFC應用項目,創(chuàng)建基于對話框的程序類型

用戶界面,按需選擇

高級功能按需選擇

生成的類:一個APP類,一個Dialog類

三、控件操作

WM系列消息是對話框接收處理,子控件的消息處理需要在消息映射中指明ID和控件事件

給對話框的控件添加消息處理的3種方式

  1. 雙擊對話框里面的控件就會在Dlg類消息映射表中添加消息映射
  2. 右擊控件,選擇類向導,命令一欄中,在里面選擇控件的ID值,在選擇對應的控件事件
  3. 右擊對話框,選擇屬性,選擇控件事件,選擇要處理的消息

如何給對話框添加控件?VS中打開工具箱,直接選中拖曳即可

當控件的消息處理無法滿足需求時,可以控件也是對話框,可以給控件,對話框添加類,指定ID,父窗口即可

資源添加一個新的對話框,在對話框中右擊選擇 添加類,會生成一個? ? ? .h? ? ? ?.cpp文件

繼承的基類選擇,可以選CDialog,或者CDialogEx(繼承自前者,提供了更加豐富的控件支持)

這個創(chuàng)建后,其構造函數如下:

  1. ButtonText::ButtonText(CWnd* pParent /*=nullptr*/): 這是構造函數的定義,它屬于名為ButtonText的類。構造函數的作用是在創(chuàng)建類的對象時進行初始化操作。
  2. :CDialogEx(IDD_DIALOG1, pParent): 這是構造函數的初始化列表(initializer list)。在這里,我們調用了基類(CDialogEx)的構造函數,并傳入兩個參數:對話框模板資源的ID(IDD_DIALOG1)和父窗口指針(pParent)。通過調用基類的構造函數,確保了從基類繼承的成員變量得到了正確的初始化。

在這個構造函數中,傳入的 pParent 參數指定了對話框的父窗口。父窗口是指對話框所屬的上層窗口,通常用于確定對話框的顯示位置和處理窗口間的關系。在這里,pParent 參數指定了對話框的父窗口,可以根據調用這個構造函數時傳入的具體參數值來確定。在實際使用中,根據具體的情景,可以傳入不同的父窗口指針,以確立對話框與哪個窗口有關聯(lián)關系。

AddDialogText::AddDialogText(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_DIALOG1, pParent)
{}

控件的類不想要了,怎么辦?項目中刪除即可,即可把類的引用修改回來,否則會造成程序連接時候報錯。


?

四、對話框創(chuàng)建和顯示?

一個控件(對話框),使用消息映射來處理控件事件;一個控件(對話框),添加類,創(chuàng)建類并且show是不一樣的。或者提供了更加豐富的功能,更重要的是可以繪制出來,與用戶交互,而且擁有自己的消息循環(huán)。

創(chuàng)建一個對話框,并設置ID值,在屬性一欄中,可以控制外觀,位置,行為等,給該對話框添加類。

當點擊第一個對話框確定按鈕后,就會彈出一個新的對話框。

所以需要在第一個對話框的 .cpp?文件包含新對話框的類。

需要在第一個消息對話框中為Button(確定按鈕)使用消息映射機制,

模態(tài)對話框

對話框,控件的本質都是對話框,創(chuàng)建他們需要先Create后Show

模態(tài)(Model)對話框:指當其顯示時,程序會暫停執(zhí)行,直到關閉這個模態(tài)對話框后,才能繼續(xù)執(zhí)行程序中其它任務。當一個模態(tài)對話框打開時,用戶只能與該對話框進行交互,而其它用戶界面對象接收不到輸入信息。在其顯示時,整個程序會暫停,直到關閉該對話框。

void CMFCApplication1Dlg::OnBnClickedOk()
{// 1.模態(tài)對話框使用CBingoDialog dlg;dlg.DoModal();    // 模態(tài)對話框,只能操作當前窗口,會阻塞消息循環(huán)
}

一但使用后該進程只能先等該對話框處理完后才能繼續(xù)處理消息。

非模態(tài)對話框

對話框,控件的本質都是對話框,創(chuàng)建他們需要先Create后Show

非模態(tài)(Modeless)對話框:當其顯示時,允許執(zhí)行程序中其它任務,而不用關閉這個對話框。在MFC中,對資源的操作通常都是通過一個與資源相關的類來完成。對話框資源對應CDialog基類。

需要考慮一個問題,如果在函數內部實例化對話框,創(chuàng)建,繪制對話框,函數執(zhí)行結束,對話框就會銷毀。最好的處理辦法就是:在第一個對話框類中,實例化對象,并在調用初始化函數時創(chuàng)建出來,在消息函數中繪制。

void CMFCApplication1Dlg::OnBnClickedOk()
{// 2.非模態(tài)對話框//需要作為MFCApplication1Dlg類的成員變量//原因:非模態(tài)對話框不會阻塞消息循環(huán),一旦函數結束就會析構掉對象,造成程序崩潰// 窗口繪制之前還需要先創(chuàng)建,在這個類初始化時進行操作if (dlg.m_hWnd == NULL){dlg.Create(IDD_DLG_EDAOYUN, this);}dlg.ShowWindow(SW_SHOW);
}

五、動態(tài)創(chuàng)建按鈕

動態(tài)的需求,需要多少個按鈕在程序開始時時不確定的,只能在程序運行時創(chuàng)建

void CBingoDialog::OnBnClickedButton1()
{// TODO: 在此添加控件通知處理程序代碼TRACE("%s(%d):%s\n", __FILE__, __LINE__, __FUNCTION__);if (m_button.m_hWnd == NULL){m_button.Create(_T("動態(tài)"), BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,CRect(100, 100, 200, 150), this, 9999);}TCHAR buf[20] = _T("");::SendMessage(m_edit1.m_hWnd, WM_GETTEXT, 20, (LPARAM)buf);m_edit1.SendMessage(WM_SETTEXT, sizeof(buf), (LPARAM)buf);this->SendMessage(WM_GETTEXT, 20, (LPARAM)buf);
}

相關必要的解釋:

  • CButton類是繼承自CWND類,m_hWnd就是該類的一個成員變量,記錄了Windows系統(tǒng)創(chuàng)建該窗口后,這個窗口的句柄由 m_hWnd 來保存。說明控件(對話框)的本質就是窗口
  • BS_DEFPUSHBUTTON:這是按鈕的樣式,表示默認的按鈕外觀。
  • WS_VISIBLE | WS_CHILD:這是窗口樣式,表示按鈕是可見的并且作為父窗口的子窗口存在。
  • CRect(100, 100, 200, 150):這是按鈕控件的位置和大小,使用矩形區(qū)域來表示,左上角坐標為 (100, 100),右下角坐標為 (200, 150)。
  • this:這個參數表示按鈕控件的父窗口,也就是按鈕所在的對話框
  • 9999:這是按鈕控件的標識符,用于在程序中唯一標識這個按鈕控件。

父窗口,子窗口:當我們在對話框中創(chuàng)建一個按鈕時,按鈕控件會成為對話框的子窗口,并且對話框將成為該按鈕的父窗口。這意味著按鈕的顯示、布局、事件處理等都是相對于對話框來進行的。同時,對話框也負責管理和維護這些子窗口,比如控制它們的顯示和隱藏,處理它們的消息等。

  1. 父窗口

    • 父窗口通常是一個容器窗口,它可以包含其他窗口作為它的子窗口。
    • 父窗口負責管理和布局它的子窗口,包括顯示、隱藏、移動、調整大小等操作。
    • 一個窗口可以同時是另一個窗口的子窗口和父窗口,這種多層次的父子關系可以形成窗口的層次結構。
  2. 子窗口

    • 子窗口是被包含在父窗口內的窗口,它的位置和尺寸相對于父窗口來確定。
    • 子窗口可以是各種控件,比如按鈕、文本框、列表框等,也可以是其它窗口。
    • 子窗口的行為通常由其父窗口來管理和控制,父窗口處理子窗口的消息并進行相應的響應。

在 MFC 編程中,對話框類通常是一個典型的父窗口,它可以包含各種控件作為其子窗口,比如按鈕、編輯框、組合框等。當你在對話框資源編輯器中放置控件時,這些控件就成為了對話框的子窗口。在對話框類的代碼中,你可以通過控件的成員變量或者控件 ID 來操作和管理這些子窗口。

上述在按鈕消息處理函數中,this指針指向的就是父窗口

六、訪問控件

控件都提供一些方法用于訪問,比如編輯框,提供了設置默認內容,獲取編輯框輸入內容給的方法

用編輯框為例,學習相關使用。

控件添加控制變量

右擊控件,添加變量

在父類中,會增加以下內容:

int m_value1;
int m_value2;
int m_value3;

父類構造函數

CBingoDialog::CBingoDialog(CWnd* pParent /*=nullptr*/): CDialog(IDD_DLG_EDAOYUN, pParent), m_value1(0), m_value2(0), m_value3(0)
{}

CEdit m_edit1;
CEdit m_edit2;
CEdit m_edit3;

添加變量 值,控件都會在 DoDataExchange 中指定對話框類成員變量與控件之間的數據交換規(guī)則,以及進行數據驗證。

void CBingoDialog::DoDataExchange(CDataExchange* pDX)
{CDialog::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, m_value1);DDV_MinMaxInt(pDX, m_value1, -9999, 9999);DDX_Text(pDX, IDC_EDIT2, m_value2);DDV_MinMaxInt(pDX, m_value2, -9999, 9999);DDX_Text(pDX, IDC_EDIT3, m_value3);DDV_MinMaxInt(pDX, m_value3, -9999, 9999);DDX_Control(pDX, IDC_EDIT1, m_edit1);DDX_Control(pDX, IDC_EDIT2, m_edit2);DDX_Control(pDX, IDC_EDIT3, m_edit3);
}

DoDataExchange 是 MFC 對話框類中的一個重要成員函數,用于實現(xiàn)對話框和控件之間的數據交換。在該函數中,可以通過調用 DDX_DDV_ 系列的宏來指定對話框類成員變量與控件之間的數據交換規(guī)則,以及進行數據驗證。

具體來說,DoDataExchange 函數通常被用來執(zhí)行兩個方面的工作:

  1. 數據傳遞(DataExchange):將對話框類中的成員變量的值與與之關聯(lián)的控件進行雙向的數據交換。這包括從控件更新數據到成員變量(如 DDX_ControlDDX_Text 等),以及將成員變量的值反向填充到相關聯(lián)的控件(如 DDX_Control、DDX_Text 等)。

  2. 數據驗證(DataValidation):在數據交換過程中,執(zhí)行數據驗證操作,確保用戶輸入的數據符合預期的格式和范圍。這包括使用 DDV_ 系列的宏來對用戶輸入的數據進行驗證,例如格式、范圍等。

在你提供的代碼中,DoDataExchange 函數擁有一個名為 pDX 的參數,這是數據交換指針,它在數據傳遞和數據驗證過程中扮演著重要的角色。通過在 DoDataExchange 函數中處理 pDX 參數,可以實現(xiàn)對話框和控件之間的數據交換和驗證。

在 MFC(Microsoft Foundation Classes)中,DDX_Text 是一個用于數據交換的宏,用于在對話框和控件之間進行文本數據的交換。

具體地說,DDX_Text 宏用于將文本控件(如編輯框)中的數據與對話框類中的成員變量相關聯(lián),或者將對話框類中的成員變量的值與文本控件相關聯(lián)。

DDX_Text(pDX, nIDC, memberName);

其中:

  • pDX?是數據交換指針,負責在對話框和控件之間進行數據交換。
  • nIDC?是控件的 ID,即要進行數據交換的控件的標識符。
  • memberName?是對話框類中的成員變量,用于存儲或顯示控件中的數據。

在你提供的代碼中,DDX_Text(pDX, IDC_EDIT1, m_value1) 的作用是將 ID 為 IDC_EDIT1 的編輯框中的文本與對話框類中名為 m_value1 的成員變量進行關聯(lián)。這樣,在對話框中修改編輯框的內容時,相關聯(lián)的成員變量 m_value1 也會相應地更新,反之亦然。

通過使用 DDX_Text 宏,可以很方便地實現(xiàn)對話框中控件和對話框類成員變量之間的雙向數據交換,這在 MFC 編程中是非常常見和有用的操作。

在 MFC(Microsoft Foundation Classes)中,DDV_MinMaxInt 是一個用于數據驗證的宏,用于驗證整數類型的數據是否在指定的最小值和最大值范圍內。

具體地說,DDV_MinMaxInt 宏用于在對話框數據驗證期間檢查整數類型的數據,確保其值在指定的最小值和最大值之間。其語法如下:

DDV_MinMaxInt(pDX, value, minVal, maxVal);

其中:

  • pDX?是數據交換指針,負責數據驗證。
  • value?是要進行驗證的整數值,通常是對話框類中的成員變量。
  • minVal?是允許的最小值。
  • maxVal?是允許的最大值。

在你提供的代碼中,DDV_MinMaxInt(pDX, m_value1, -9999, 9999) 的作用是驗證對話框類中名為 m_value1 的整數成員變量,確保其值在 -9999 到 9999 的范圍內。如果用戶輸入的值不在這個范圍內,MFC 將會顯示相應的驗證錯誤消息,并阻止用戶繼續(xù)進行操作,直到輸入的值符合要求為止。

通過使用 DDV_MinMaxInt 宏,可以方便地實現(xiàn)對話框中整數類型數據的范圍驗證,確保用戶輸入的數據符合預期的范圍要求。

DDX_Control 宏用于將對話框中的控件與對話框類中的成員變量進行關聯(lián),其作用是將控件的句柄(handle)與對話框類中的成員變量相關聯(lián),從而可以通過成員變量來操作控件。

具體來說,DDX_Control 宏的語法如下:

DDX_Control(pDX, nIDC, m_memberName);

其中:

  • pDX?是數據交換指針,負責在對話框和控件之間進行數據交換。
  • nIDC?是控件的 ID,即要進行數據交換的控件的標識符。
  • m_memberName?是對話框類中的成員變量,用于存儲控件的句柄。

在你提供的代碼中,DDX_Control(pDX, IDC_EDIT1, m_edit1) 的作用是將 ID 為 IDC_EDIT1 的編輯框控件與對話框類中名為 m_edit1 的成員變量進行關聯(lián)。這樣一來,通過 m_edit1 成員變量可以直接操作對應的編輯框控件,例如獲取或設置文本內容、啟用或禁用控件等操作。

通過使用 DDX_Control 宏,可以方便地實現(xiàn)對話框類成員變量與控件之間的關聯(lián),簡化了對控件的操作和管理。

訪問對話框

GetDlgItem?根據控件的 ID 來獲取對應的編輯框控件對象的指針。

SetWindowText:為編輯框設置初始值

GetWindowText:獲取編輯框內的值

SetDlgItemText,GetDlgItemText 上面兩個功能的綜合體

BOOL CBingoDialog::OnInitDialog()
{CDialog::OnInitDialog();// TODO:  在此添加額外的初始化CWnd* pEdit01 = GetDlgItem(IDC_EDIT1);CWnd* pEdit02 = GetDlgItem(IDC_EDIT2);//CWnd* pEdit03 = GetDlgItem(IDC_EDIT3);CString strText;if (pEdit01 != NULL){pEdit01->SetWindowText(_T("100"));pEdit01->GetWindowText(strText);}if (pEdit02 != NULL){SetDlgItemText(IDC_EDIT2, _T("200"));GetDlgItemText(IDC_EDIT2, strText);}//if (pEdit03 != NULL) pEdit03->SetWinodwText(_T("300"));SetDlgItemInt(IDC_EDIT3, 100);return TRUE;  // return TRUE unless you set the focus to a control// 異常: OCX 屬性頁應返回 FALSE
}

操作對話框

在對話框中輸入三個值,點擊確定按鈕后,會把前兩個值相加放到第三個中

UpdateData() 是 MFC 中用于進行對話框和控件之間數據交換的函數。通過調用 UpdateData(TRUE),可以將對話框中的控件的當前值更新到關聯(lián)的成員變量中;而通過調用 UpdateData(FALSE),可以將成員變量的值更新到關聯(lián)的控件中。

void CBingoDialog::OnBnClickedOk()
{// TODO: 在此添加控件通知處理程序代碼//CDialog::OnOK();//UpdateData();//m_value3 = m_value2 + m_value1;//UpdateData(FALSE);CString str1, str2, str3;m_edit1.GetWindowText(str1);m_edit2.GetWindowText(str2);int t = _wtoi(str1) + _wtoi(str2);TCHAR buf[32] = _T("");str3 = buf;m_edit3.SetWindowTextW(str3);
}

SendMessage()

一個是調用全局的方法,一個是調用編輯框類的方法

::SendMessage(m_edit1.m_hWnd, WM_GETTEXT, 20, (LPARAM)buf);
m_edit1.SendMessage(WM_SETTEXT, sizeof(buf), (LPARAM)buf);

SendMessage() 是 Windows API 中用于發(fā)送消息的函數之一,在 MFC 中也可以使用。通過 SendMessage() 函數,可以向窗口或控件發(fā)送特定的消息,以實現(xiàn)各種操作,如獲取或設置控件的狀態(tài)、通知控件發(fā)生了特定的事件等。

具體來說,SendMessage() 函數的原型為:

LRESULT SendMessage(HWND   hWnd,UINT   Msg,WPARAM wParam,LPARAM lParam
);
  • hWnd:指定要接收消息的窗口或控件的句柄。
  • Msg:指定要發(fā)送的消息類型,是一個表示消息的整數值。
  • wParam?和?lParam:作為消息參數傳遞的額外信息,具體意義取決于不同的消息類型。

在 MFC 中,你可以使用 SendMessage() 函數來與窗口控件進行交互,例如設置控件的狀態(tài)、獲取控件的信息、自定義處理消息等。常見的用法包括發(fā)送 WM_SETTEXT 消息來設置控件的文本內容,發(fā)送 BM_CLICK 消息來模擬按鈕的點擊操作,以及發(fā)送自定義消息來實現(xiàn)特定的功能。

七、對話框伸縮功能實現(xiàn)

思路:初始化對話框函數中,獲取窗口大小,計算得到縮小后的窗口大小

GetWindowRect獲取對話框大小

判斷一個矩形是否為空:IsRectEmpty(),IsRectNull()。前者是判斷矩形面積是否為空,后者是判斷矩形的四個坐標值是否為0,不關心是否能做為一個矩形。

SetWindowPos()改變窗口的大小。

BOOL CBingoDialog::OnInitDialog()
{CDialog::OnInitDialog();// 獲取窗口范圍GetWindowRect(m_large);m_small = m_large;// 計算得到縮小后的范圍m_small.right = m_small.left + m_small.Width() / 2;m_small.bottom = m_small.top + m_small.Height() / 2;return TRUE;  // return TRUE unless you set the focus to a control// 異常: OCX 屬性頁應返回 FALSE
}

在縮小按鈕按鈕事件中完成對窗口的縮放處理

void CBingoDialog::OnBnClickedBtnLarge()
{// TODO: 在此添加控件通知處理程序代碼CRect curRect;GetWindowRect(curRect);CWnd* pButton = GetDlgItem(IDC_BTN_LARGE);CString strTitle;if (pButton){pButton->GetWindowText(strTitle);if (strTitle == _T("放大") && m_large.IsRectEmpty() == FALSE){pButton->SetWindowTextW(_T("縮小"));SetWindowPos(NULL, curRect.left, curRect.top, m_large.Width(), m_large.Height(), SWP_NOMOVE | SWP_NOZORDER);// 窗口Z軸控制//SetWindowPos(&wndTopMost, curRect.left, curRect.top, m_large.Width(), m_large.Height(), SWP_NOMOVE);}else if (m_small.IsRectEmpty() == FALSE){pButton->SetWindowTextW(_T("放大"));SetWindowPos(NULL, curRect.left, curRect.top, m_small.Width(), m_small.Height(), SWP_NOMOVE | SWP_NOZORDER);//SetWindowPos(&wndTopMost, curRect.left, curRect.top, m_small.Width(), m_small.Height(), SWP_NOMOVE);}}
}

八、小項目-逃跑按鈕

創(chuàng)建一個基于對話框的項目,為兩個按鈕添加變量-控件

給這個項目,類向導,添加MFC類

這是,兩個按鈕添加變量-控件,是屬于CBUTTON類;CMyButton類是屬于CButton的子類。

鼠標移動到按鈕控件上的消息會被控件捕獲,而不會給對話框

不信的話,可以在對話框中設置一個鼠標移動消息驗證一下

TRACE("%s(%d):%s %d %d\n", __FILE__, __LINE__, __FUNCTION__, point x, point y);

項目思路:為兩個按鈕對象給出MouseMove方法,響應消息

兩個按鈕創(chuàng)建變量-控件后,控件就會被類關聯(lián);使用CMyButton?指向這兩個控件變量

	CMyButton m_btn_light;CMyButton m_btn_left;

CMyButton中設置一個類指針

CMyButton* m_pButton;

在對話框初始化時關聯(lián)起來

	m_btn_left.m_pButton = &m_btn_light;m_btn_light.m_pButton = &m_btn_left;

處理邏輯

void CMyButton::OnMouseMove(UINT nFlags, CPoint point)
{// TODO: 在此添加消息處理程序代碼和/或調用默認值ShowWindow(SW_HIDE);if (m_pButton != NULL){m_pButton->ShowWindow(SW_SHOW);}CButton::OnMouseMove(nFlags, point);
}

點擊成功提示

void CRunningButtonDlg::OnBnClickedButton2()
{// TODO: 在此添加控件通知處理程序代碼MessageBox(_T("恭喜你,點到我了"), _T("成功!"));
}

九、小項目-屬性頁添加

在八的基礎上,給對話框添加一個新的按鈕,點擊后,會給出一個新的對話框

添加對話框資源

給新的對話框控件:Group Box,單選框,靜態(tài)文本,列表

給這個對話框添加類,類向導,添加MFC類

給單選框添加控制變量-值,不必設置范圍

這樣做的意義就是有了對話框類,成員變量是控件的值,就可以拿到這些值了。

但是設置三個值記錄太麻煩了,不如再次基礎上魔改以下

修改為BOOL數組記錄值

?修改初始化函數,和關聯(lián)函數

為新對話框類重寫初始化函數,選擇這個類,屬性,重寫,選擇要重寫的類,要在初始化時為列表進行初始化,單選框不用,因為我們只需要獲得它的狀態(tài)。

BOOL PROP_01::OnInitDialog()
{CPropertyPage::OnInitDialog();// TODO:  在此添加額外的初始化// 因為GetDlgItem拿到根據ID拿控件的對象地址,默認類型時CWND,需要強制轉換// 就可以通過地址來操作類的成員屬性CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST_COMPANY);if (pListBox){pListBox->AddString(_T("阿里巴巴"));pListBox->AddString(_T("華為"));pListBox->AddString(_T("騰訊"));pListBox->AddString(_T("京東"));pListBox->AddString(_T("百度"));}return TRUE;  // return TRUE unless you set the focus to a control// 異常: OCX 屬性頁應返回 FALSE
}

按照上面方法再創(chuàng)建一個對話框,添加控件

為對話框添加MFC類,右擊對話框,類向導,添加MFC類

為多選框添加控制變量-值,和上面一樣

按照上面再添加一個,最后一個了

類向到,添加MFC類

添加控制變量-值

十、屬性頁處理

再追加一個MFC類,類向導,MFC類

將三個對話框作為成員變量添加給類 CMyProSheet

兩個構造函數都要處理

父對話框觸發(fā)點擊事件

運行程序試試看

程序崩潰,嘗試Debug,點擊重試,程序就可以定位到崩潰處

問題出在這里

可能時對話框實例失敗,驗證以下,問題不在這里

查看調用堆棧,貌似也沒啥問題,嗯?發(fā)現(xiàn)問題

查看路徑下源碼行處,發(fā)現(xiàn)對于處理單選框需要指定Group屬性

單選框只能選一個,CTRL+D,可見Tab順序

需要3,4,5是一個tab中,只需要再第一個單選框選中即可 GROUP=TRUE

那么單選框也就不需要數組了,Int 即可

接下來,優(yōu)化對話框的上一步,下一步,去掉幫助按鈕,未優(yōu)化

優(yōu)化:重寫三個對話框類的激活方法(不是消息,是類的一個方法)

給公司添加控制變量

優(yōu)化:重寫OnwizardNext(),必須選擇才能執(zhí)行到下一步

十一、一些開發(fā)經驗

需要初始化的控件可以在父窗口類初始化時進行。

添加控制變量(控件):值,可以拿到控件的值(編輯框的內容等等);控件,可以拿到控件的句柄保存到一個對象中。

將控制變量放到父窗口類中,我們可以自由拿到,通過父窗口對象操作控件

當需要處理控件的消息時,需要為控件添加控制變量到父窗口類中;如果想要處理該控件的消息,就需要實例化這個控件(所有控件都是繼承自CWIND,都是窗口)。就需要創(chuàng)建出來一個類,利用多態(tài),新類指向控制變量-控件,在新類中設置處理消息的函數,就可以了。參考八

獲取窗口大小的操作都是放到初始化時完成的

在函數中不可實例化對象,因為函數結束對象銷毀,不妨把要實例化的類放在類中,在函數中創(chuàng)建重繪。

添加MFC類,其實道理和八一樣,對話框(控件)有了自己的類,就可以有更多操作的控件;再框架中要通過消息映射機制,操作空間有限

http://m.risenshineclean.com/news/61559.html

相關文章:

  • 提供手機自適應網站建設優(yōu)化疫情防控 這些措施你應該知道
  • 這是我自己做的網站嗎百度怎么發(fā)廣告
  • 旅游酒店網站建設三葉草gw9356
  • 網站維護 公司簡介網站免費網站免費
  • 佛山做網站建設政府免費培訓面點班
  • wordpress拉寬seo文章優(yōu)化技巧
  • 最火的網絡銷售平臺seo顧問合同
  • 高端網站定制方案seo網絡推廣培訓
  • 高端網站建設kgu網站建設網站
  • b2b網站建設案例鄭州網絡營銷顧問
  • 昆明網站seo報價推廣普通話手抄報內容大全資料
  • 網站常見攻擊營銷型網站建設步驟
  • 江蘇網站設計建站模板
  • 做網站的銷售簡述在線推廣網站的方法
  • 個體工商戶 做經營性網站網站鏈接查詢
  • wifi擴展器做網站百度資源平臺鏈接提交
  • 鄭州好的網站設計公司搜索引擎關鍵詞排名優(yōu)化
  • 項城做網站搜索引擎的網址有哪些
  • 政府門戶網站什么意思搜索引擎優(yōu)化seo優(yōu)惠
  • wordpress添加關鍵詞描述seo優(yōu)化在線診斷
  • 蘇州營銷網站建設公司杭州seo搜索引擎優(yōu)化
  • vps網站設置搜索引擎優(yōu)化的基礎是什么
  • 四川專門做招聘酒的網站網頁制作公司排名
  • 網站建設公司 南京舉例一個成功的網絡營銷案例
  • 網站開發(fā)平臺的定義鴻星爾克網絡營銷案例分析
  • 重慶市建設網站站長網站seo查詢
  • 怎么查網站有沒有做404營銷推廣工作內容
  • 網上商城建設seo策略是什么意思
  • 杭州設計公司網站排名黃岡免費網站推廣平臺匯總
  • 用asp.net做的網站實例行業(yè)關鍵詞搜索排名