第十一章 Windows 编程

Click here to load reader

download 第十一章  Windows 编程

of 213

description

第十一章 Windows 编程. Windows 编程的基本思想. MFC 概述. 典型的 Windows 程序设计. C. C. C. C. C. + +. + +. + +. + +. + +. Windows 编程. Windows 程序的特点:. 界面风格统一,便于用户掌握应用程序. 采用事件和消息机制(消息驱动). 可视化的开发工具使界面生成简单、美观统一,减少开发者劳动量. 提供丰富的程序员接口函数( API ). 面向对象的开发模式. 窗 口. 窗口是 Windows 应用程序的基本的操作单 - PowerPoint PPT Presentation

Transcript of 第十一章 Windows 编程

  • Windows Windows MFC Windows

  • WindowsAPIWindows

  • Windows

  • Windows

  • Windows

  • Windows1Windows2Windows34

  • typedef struct tagMSG { // msg HWND hwnd; // UINT message; // WPARAM wParam; // LPARAM lParam; // DWORD time; // POINT pt; // } MSG; Windows windowsMSG

  • Windows WM_CREATEWM_DESTROYWM_CLOSE,WM_MOVE , WM_SIZE , WM_PAINT WM_CHARWM_KEYDOWNWM_KEYUP WM_MOUSEMOVE,WM_LBUTTONDOWN,WM_LBUTTONUP, WM_LBUTTONDBCLICK,WM_RBUTTONDOWN,WM_RBUTTONUP,WM_RBUTTONDBCLICK WM_SETFOCUSWM_KILLFOCUS WM_TIMER

  • Windows (WNDPROC)? MS

  • Windows4

  • VCwindows Windows API MFC

  • int WINAPI WinMain() {//WNDCLASS wndcls;wndcls.style=CS_HREDRAW | CS_VREDRAW;wndcls.lpfnWndProc=WndProc; wndcls.lpszClassName="111"; RegisterClass(&wndcls); // hwnd=CreateWindow("111", ); // ShowWindow(hwnd,SW_SHOWNORMAL);//UpdateWindow(hwnd);Windows API

  • MSG msg; while(GetMessage(&msg,NULL,0,0)){ TranslateMessage(&msg);DispatchMessage(&msg); }return msg.wParam; }Windows API

  • LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){switch(uMsg){case WM_CHAR: case WM_LBUTTONDOWN: case WM_DESTROY:PostQuitMessage(0); break;default:return DefWindowProc(hwnd,uMsg,wParam,lParam);}return 0; }Windows API

  • MFCMicrosoft Fundation ClassC++ MFCWindows API MFCMFC

  • Windows4. 2. 5. 1. 3. 6. 7. 8.

  • Windows(Style) (*)

  • MyEditMyEdit

  • MyEdit Test 1MyEditThis is a test

  • MyEdit Clear 1MyEdit Test 2 MyEditYou clicked the Test 2 button Clear 2 MyEdit

  • MyEdit Visual C++ FileNew NewProject MFC AppWizard[exe] MyEdit OK

  • MyEdit Step 1 Step 1Next Step 2 About BoxUse 3D Controls Step 2Next

  • MyEdit Step 3 Step 3 NextMFC StandardMFC

  • Step 4FinishVisual C++New Project InformatinoMyEdit Visual C++ OK

  • MyEdit MyEditAppWizardAppWizardIDD_MYEDIT_DIALOGThe edit box toolThe push button tool

  • MyEdit

    IDCaptionIDD_MYEDIT_DIALOGThis is MyEditIDC_EDIT1IDC_TEST1_BUTTONTest &1IDC_CLEAR1_BUTTON&Clear 1IDC_EDIT2IDC_TEST2_BUTTONTest &2IDC_CLEAR2_BUTTONCl&ear 2

  • MyEdit

    IDCaptionIDC_EXIT_BUTTONE&xitIDC_COPY_BUTTONC&opyIDC_PASTE_BUTTONPa&ste

  • MyEdit

  • MyEdit m_Edit1IDC_EDIT1 ViewClass WizardClass Wizard Member Variables Class NameCMyEditDlg IDC_EDIT1 Add Variable Add Member Variablem_Edit1Value,Cstring,OK

  • Test1Clear1BN_CLIKED Test 1 ViewClass WizardClass Wizard Message Maps Class NameCMyEditDlg IDC_TEST1_BUTTONBN_CLIKED Add Function Visual C++OnTest1Button() Edit Code CMyEditDlg->IDC_TEST1_BUTTON ->BN_CLIKED

  • Test1Clear1BN_CLIKED OnTest1Buttonvoid CMyEditDlg::OnTest1Button() {///////////////////////////My Code Starts Here/////////////////////////m_Edit1="This is a test.";UpdateData(FALSE); //////////////////////// //My Code Ends Here /////////////////////////}UpdateDataBOOLUpdateData(FALSE)UpdateData(TRUE)

  • Test1Clear1BN_CLIKED OnClear1Buttonvoid CMyEditDlg::OnClear1Button() {///////////////////////////My Code Starts Here/////////////////////////m_Edit1="";UpdateData(FALSE); //////////////////////// //My Code Ends Here /////////////////////////} Clear 1

  • Add Member Variablem_Edit2ControlCEdit ViewClass WizardClass Wizard Member Variables Class NameCMyEditDlg IDC_EDIT2 Add Variable

  • Test2 ViewClassWizard CMyEditDlg->IDC_TEST2_BUTTON->BN_CLICIKED Add Funtion Visual C++OnTest2Button() Edit Code OnTest2Button() Test 2

  • Test2void CMyEditDlg::OnTest2Button() {////////////////////////////My Code Starts Here/////////////////////////m_Edit2.SetSel(0,-1);m_Edit2.ReplaceSel("You clicked the test 2 button."); //////////////////////////My Code Ends Here////////////////////////}

  • Clear 2Clear2 OnClear2Button()void CMyEditDlg::OnClear2Button() {////////////////////////////My Code Starts Here/////////////////////////m_Edit2.SetSel(0,-1);m_Edit2.ReplaceSel(" "); //////////////////////////My Code Ends Here////////////////////////}

  • Copy ViewClassWizard CMyEditDlg->IDC_COPY_BUTTON->BN_CLICIKED Add Funtion Visual C++OnCopyButton() Edit Code OnCopyButton()

  • Copyvoid CMyEditDlg::OnCopyButton() {////////////////////////////My Code Starts Here/////////////////////////m_Edit2.SetSel(0,-1);m_Edit2.Copy(); //////////////////////////My Code Ends Here////////////////////////}

  • Paste ViewClassWizard Add Funtion Visual C++OnPasteButton() Edit Code OnPasteButton() CMyEditDlg->IDC_PASTE_BUTTON->BN_CLICIKED

  • void CMyEditDlg::OnPasteButton() {////////////////////////////My Code Starts Here/////////////////////////m_Edit2.SetSel(0,-1);m_Edit2.Paste(); //////////////////////////My Code Ends Here////////////////////////}Paste

  • IDC_EDIT2 IDC_EDIT2 ViewProperties IDC_EDIT2 Style MultilineHorizon Scroll,Auto Hscroll,Vertical Scroll,Want Return Border

  • 252

  • CWndCWndCEditCEdit:Copy(),Cut(),Paste(),Undo(), SetSel:void SetSel( int nStartChar, int nEndChar)ReplaceSelvoid ReplaceSel( LPCTSTR lpszNewText)

  • CDialogCDialogCMyEditDlgCObjectCCmdTargetCWndCDialogCWnd:MessagBox:int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK ); UpdateData: BOOL UpdateData(BOOL bSaveAndValidate=TRUE); CDialog:OnOK: void OnOK( ); CMyEditDlg

  • AppWizardWindows Visual C++Class Wizard Class Wizard

  • VC++

  • MyMenu MyMenu

  • MyMenu Visual C++ FileNew NewProject MFC AppWizard[exe] MyMenu OK

  • Step 1 Step 1Next Step 2 About BoxUse 3D Controls Step 2NextMyMenu

  • Step 3 Step 3 NextMFC StandardMFCMyMenu

  • Step 4Finish Visual C++New Project Informatino Visual C++ OKMyMenu

  • MyMenu

    IDCaptionIDD_MYMENU_DIALOGMyMenu IDC_BEEP1_BUTTONBeep &1 IDC_BEEP2_BUTTONBeep &2 IDC_SHOW_BUTTON&Show IDC_EXIT_BUTTONE&xit

  • MyMenuMyMenu

  • AppWizard InsertResourceInsert Resource MenuNew

  • ViewWorkspaceMyMenu Resource Veiw Menu+IDIDR_MENU1 ID &File

    IDCaption&FileID_FILE_SHOW&ShowID_FILE_EXIT&Exit BeepID_BEEP_BEEP1Be&ep1ID_BEEP_BEEP2Bee&p2HelpID_HELP_ ABOUT&About

  • IDD_MYMENU_DEALOG PropertiesDialog Properties MenuIDR_MENU1

  • IDR_MENU1CMyMenuDlg CLi2DlgIDD_MYMENU_DIALOGIDR_MENU1 IDR_MENU1CMyMenuDlg ClassWizard OKSelect ClassCMyMenuDlg

  • FileExit FileExitMyMenuExitCOMMANDCOMMOND ViewClass WizardClass Wizard Message Maps CMyMenuDlg->IDC_FILE_EXIT ->COMMAND

  • FileShowvoid CMyMenuDlg::OnFileShow() {// //////////////////////////////////MessageBox("");//////////////////////////////////}

  • Add Funtion Edit Code Visual C++OnFileExit()void CMyMenuDlg::OnFileExit() {// //////////////////////////////////OnOK( );//////////////////////////////////}

  • BeepBeep1void CMyMenuDlg::OnBeepBeep1() {// //////////////////////////////////MessageBeep(0);//////////////////////////////////}

  • BeepBeep2void CMyMenuDlg::OnBeepBeep2() {// //////////////////////////////////MessageBeep(0);DWORD star=GetCurrentTime( );while(GetCurrentTime( )
  • HelpAboutvoid CMyMenuDlg::OnHelpAbout() {// //////////////////////////////////CAboutDlg dlgAbout; dlgAbout.DoModal( );//////////////////////////////////}

  • Beep1void CMyMenuDlg::OnBeep1Button( ) {// //////////////////////////////////OnBeepBeep1( );//////////////////////////////////}

  • Beep2void CMyMenuDlg::OnBeep2Button( ) {// //////////////////////////////////OnBeepBeep2( );//////////////////////////////////}

  • Showvoid CMyMenuDlg::OnShowButton( ) {// //////////////////////////////////OnFileShow( );//////////////////////////////////}

  • Exitvoid CMyMenuDlg::OnExitButton( ) {// //////////////////////////////////OnFileExit( );//////////////////////////////////}

  • MessageBeep(0);GetCurrentTime();

  • Windows

  • MyCheckBox

  • My Check BoxMy Check Box is NOT checkedMy Check Box is checkedMy Check Box

  • MyCeckBox Visual C++ FileNew NewProject MFC AppWizard[exe] MyCheckBox OK

  • Step 1 Step 1Next Step 2 About BoxUse 3D Controls MyCheckBox Step 2Next

  • Step 3 Step 3 NextMFC StandardMFCMyCheckBox

  • Step 4Finish Visual C++New Project Informatino Visual C++ OKMyCheckBox

  • MyCheckBox MyCheckBoxApp-Wizard AppWizard IDD_MYCHECKBOX_DIALOGThe check Box tool

  • IDCaptionIDD_MYCHECKBOX_DIALOGMyCheckBoxIDC_MY_CHECKBOXMy Check BoxIDC_MY_EDITBOX IDC_SHOW_BUTTON&Show IDC_HIDE_BUTTON&Hide IDC_ENABLE_BUTTON&Enable IDC_DISABLE_BUTTON&Disable IDC_EXIT_BUTTONE&xit

  • void CMyChekBoxDlg::OnMycheckBox() { // TODO: Add your control notification handler code here /////////// // UpdateData(TRUE); if(m_MyCheck==TRUE) m_MyEdit="My check box is checked."; else m_MyEdit="My check box is NOT checked."; UpdateData(FALSE); /////////// //}Click

  • MyCheckBox IDD_MYCHECK_DIALOGClassWizard

    IDIDC_MY_CHECKm_MyCheckValueBOOLIDC_MY_EDITm_MyEditValueCString

  • MyCheckBoxMy Check BoxMyCheckBoxMy Check Box IDD_MYCHECKBOX_DIALOGWM_INITDIALOG ClassWizard ClassWizardMassage Maps

  • ClassWizardCMyCheckBoxDlg->CCheckBoxDlg->WM_INITDIALOG

  • Edit CodeBOOL CMyChekBoxDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}

    // Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);// Set big iconSetIcon(m_hIcon, FALSE);// Set small icon// TODO: Add extra initialization here///////////////m_MyCheck=TRUE;m_MyEdit="My Check Box is checked.";UpdateData(FALSE);////////////////return TRUE; // return TRUE unless you set the focus to a control}

  • Click ClassWizard ClassWizard ClassWizardMassage MapsCMyCheckBoxDlg->IDC_MY_CHECK->BN_CLICKED Add Function OnMyCheck() Edit Code

  • void CMyChekBoxDlg::OnMycheckBox( ) { // TODO: Add your control notification handler code here /////////// // UpdateData(TRUE); if(m_MyCheck==TRUE) m_MyEdit="My check box is checked."; else m_MyEdit="My check box is NOT checked."; UpdateData(FALSE); /////////// //}Click

  • void CMyChekBoxDlg::OnHideButton() { // TODO: Add your control notification handler code here /////////// // GetDlgItem(IDC_MY_CHECK) ->ShowWindow(SW_HIDE); /////////// //}HideShow GetDlgItem() GetDlgItem()IDIDC_MY_CHECK

  • ShowWindow()SW_HIDEShowWindow()SW_SHOWvoid CMyChekBoxDlg::OnShowButton() { // TODO: Add your control notification handler code here /////////// // GetDlgItem(IDC_MY_CHECK) ->ShowWindow(SW_SHOW); /////////// //}HideShow

  • DisableEnablevoid CMyChekBoxDlg::OnEnableButton() { // TODO: Add your control notification handler code here /////////// // GetDlgItem(IDC_MY_CHECK)->EnableWindow(TRUE); /////////// //}EnableWindow( )/

  • OnOKUpdateDataMessageBoxMessageBeepGetCurrentTimeGetDlgItem

  • HelpSearch Visual C++ GetDlgItem CWnd::GetDlgItem

    void CMyChekBoxDlg::OnHideButton() { // TODO: Add your control notification handler code here /////////// // GetDlgItem(IDC_MY_CHECK) ->ShowWindow(SW_HIDE); /////////// //}

  • CDialog CDialogCWnd

  • CMyCheckBoxDlg CDialog

  • CMyCheckBoxDlgCDialogCDilalogCWndCMyCheckBoxDlgCWndGetDlgItem()ShowWindow()CWnd

  • Visual C++ GetDlgItem()ShowWindow()EnableWindow()

  • MyScroll010050

  • 111010

  • MyScroll Visual C++ FileNew NewProject MFC AppWizard[exe] MyScroll OK

  • Step 1 Step 1Next Step 2 About Box Use 3D Controls Step 2NextMyScroll

  • Step 3 Step 3 NextMFC StandardMFCMyScroll

  • Step 4Finish Visual C++New Project Information Visual C++ OKMyScroll

  • MyScroll MyScrollAppWizardAppWizard IDD_MYSCROLL_DIALOGThe scroll bar tool

  • IDCaptionIDD_MYSCROLL_DIALOGMyScrollIDC_STATICSpeedIDC_MY_SCROLLIDC_MY_EDIT IDC_SHOW_BUTTON&Show IDC_HIDE_BUTTON&Hide IDC_ENABLE_BUTTON&Enable IDC_DISABLE_BUTTON&Disable IDC_EXIT_BUTTONE&xit

  • MyScroll

    IDCaption IDC_MIN_BUTTON&Min IDC_MAX_BUTTONM&ax

  • MyScroll

  • MyScroll IDD_MYSCROLL_DIALOGClassWizard

    IDIDC_MY_EDITm_MyEditControlCEditIDC_MY_SCROLLm_MyScrollControlCScrollBar

  • MyScroll500100 IDD_MYSCROLL_DIALOGWM_INITDIALOG ClassWizard ClassWizardMassage Maps 50

  • ClassWizardCMyScrollDlg->CMyScrollDlg->WM_INITDIALOG

  • BOOL CMyScorllDlg::OnInitDialog( ){ // TODO: Add extra initialization here m_MyScroll.SetScrollRange(0,100); m_MyScroll.SetScrollPos(50); char sPos[25]; itoa(m_MyScroll.GetScrollPos( ),sPos,10); m_MyEdit.SetSel(0,-1); m_MyEdit.ReplaceSel(sPos); }////////sPositoa(int,char[],int)2-36

  • WM_HSCROLL ClassWizard ClassWizardMassage Maps ClassWizardCMyScrollDlg->CMyScrollDlg->WM_HSCROLLOnHScroll Edit Code

  • if(nSBCode == SB_THUMBTRACK){ }else if(nSBCode == SB_LINEUP) { }else if(nSBCode == LINEDOWN) { }else if(nSBCode == PAGEUP) { }else if(nSBCode == PAGEDOWN) { }void CMyScorllDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

  • switch (nSBCode){ case SB_THUMBTRACK: break; case SB_LINEUP: break; case SB_LINEDOWN: break; case SB_PAGEUP: break; case SB_PAGEDOWN: break;}void CMyScorllDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)if(pScrollBar= =&m_MyScroll){}

  • void CMyScorllDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add extra initialization here char sPos[25]; { switch (nSBCode) { case SB_THUMBTRACK: m_MyScroll.SetScrollPos(nPos); itoa(m_MyScroll.GetScrollPos( ),sPos,10); m_MyEdit.SetSel(0,-1); m_MyEdit.ReplaceSel(sPos); break;if(pScrollBar= =&m_MyScroll)

  • case SB_LINEUP: iCurrent=m_MyScroll.GetScrollPos( ); iCurrent=iCurrent-1; if(iCurrent
  • case SB_LINEDOWN: iCurrent=m_MyScroll.GetScrollPos( ); iCurrent=iCurrent+1; if(iCurrent>100) iCurrent=100; m_MyScroll.SetScrollPos(iCurrent); itoa(m_MyScroll.GetScrollPos( ),sPos,10); m_MyEdit.SetSel(0,-1); m_MyEdit.ReplaceSel(sPos); break;

  • case SB_PAGEUP: iCurrent=m_MyScroll.GetScrollPos( ); iCurrent=iCurrent-10; if(iCurrent
  • case SB_PAGEDOWN: iCurrent=m_MyScroll.GetScrollPos( ); iCurrent=iCurrent+10; if(iCurrent>100) iCurrent=100; m_MyScroll.SetScrollPos(iCurrent); itoa(m_MyScroll.GetScrollPos( ),sPos,10); m_MyEdit.SetSel(0,-1); m_MyEdit.ReplaceSel(sPos); break;

  • MinMaxResetvoid CMyScorllDlg::OnMinButton( ) {// TODO: Add your control notification handler code herem_ MyScroll.SetScrollPos(0); m_MyEdit.SetSel(0,-1);m_MyEdit.ReplaceSel("0");}

  • DisableEnablevoid CMyScorllDlg::OnDisableButton( ) {m_MyScroll.EnableWindow(FALSE);}

    void CMyScorllDlg::OnEnableButton( ) {m_MyScroll.EnableWindow(TRUE);}

  • HideShowvoid CMyScorllDlg::OnShowButton( ) {m_MyScroll.ShowWindow(SW_SHOW);}void CMyScorllDlg::OnHideButton( ) {m_MyScroll.ShowWindow(SW_HIDE);}

  • MyScroll DisableMinMaxReset OnDisableButton()MinMaxReset OnEnableButton()MinMaxReset OnShowButton()OnHideButton()MinMaxReset

  • Visual C++WM_HSCROLL

  • GetScrollPos SetScrollRangeSetScrollPos itoa

  • Windows

  • 1MyList

  • MyList MyList

  • MyList Visual C++ FileNew NewProject MFC AppWizard[exe] MyList OK

  • Step 1 Step 1Next Step 2 About Box Use 3D Controls Step 2NextMyList

  • Step 3 Step 3 NextMFC StandardMFCMyList

  • Step 4Finish Visual C++New Project Information Visual C++ OKMyList

  • MyList MyListAppWizardAppWizardAppWizard IDD_MYLIST_DIALOGList box

  • MyList

    IDCaptionIDD_MYLIST_DIALOGMyListIDC_MY_LIST IDC_EXIT_BUTTON&Exit

  • MyListMyList

  • m_MyListControlCListBox IDD_MYLIST_DIALOGWM_INITDIALOGWM_INITDALOG ClassWizard ClassWizardMassage Maps ClassWizardCMyListDlg->CMyListDlg->WM_INITDIALOG

  • Edit Code

  • OnInitDialog()BOOL CMyListDlg::OnInitDialog(){ // TODO: Add extra initialization here

    //m_MyList.AddString("I'm the first string.");m_MyList.AddString("I'm the second string.");m_MyList.AddString("I'm the third string."); //return TRUE; // return TRUE unless you set the focus to a control}

  • IDIDC_SELECT_EDIT m_SelectEditIDC_SELECT_EDITConrtolCEditCEdit

    IDIDC_SELECT_EDITm_SelectEditControlCEdit

  • IDC_MY_LIST LBN_DBLCLK LBN_DBLCLK ClassWizard ClassWizardMassage Maps ClassWizardCMyListDlg->IDC_MYLIST->LBN_DBLCLK

  • Edit Code OnDblclkMyList() void CMyListDlg::OnDblclkMyList() { // TODO: Add your control notification handler code here // char str[50]; m_MyList.GetText(m_MyList.GetCurSel(),str); m_SelectEdit.SetSel(0,-1); m_SelectEdit.ReplaceSel(str); //}

  • IDCaptionIDC_ADD_EDIT IDC_ADD_BUTTON

    IDIDC_ADD_EDITm_AddEditControlCEdit

  • void CMyListDlg::OnAddButton() {// TODO: Add your control notification handler code here //char str[50];m_AddEdit.GetWindowText(str,50);m_MyList.AddString(str); //}

  • IDCaptionIDC_COUNT_EDIT IDC_COUNT_BUTTONm_MyList.GetCount( )

    IDIDC_COUNT_EDITm_CountEditControlCEdit

  • m_MyList.GetCount()void CMyListDlg::OnGetcountButton() {// TODO: Add your control notification handler code here int n; n=m_MyList.GetCount(); char s_n[5]; itoa(n,s_n,10); char str[50]; strcpy(str, "Numer of items in the list box:"); strcat(str, s_n); m_CountEdit.SetSel(0, -1); m_CountEdit.ReplaceSel(str);}

  • 2. GetText(int,char[]) 1. GetCurSel() 5. GetWindowText(char[],int) 4. AddString() 6. itoa(int,char[], ) 3. GetCount() 7. strcpy(char[], ) 8. strcat(char[],char[]) CListBox CEdit

  • 2MyCombo MyCombo

  • MyComboMyCombo

    IDCaptionIDC_MY_COMBOIDC_MY_EDIT IDC_TO_BUTTON IDC_EXIT_BUTTONE&xit

    IDIDC_MY_COMBOm_MyComboControlCComboBoxIDC_MY_EDITm_MyEditControlCEdit

  • // TODO: Add extra initialization here //m_MyCombo.AddString("I'm string a.");m_MyCombo.AddString("I'm string b.");m_MyCombo.AddString("I'm string c.");m_MyCombo.AddString("I'm string d."); //

  • void CMyComboDlg::OnToEditButton() {// TODO: Add your control notification handler code here // char str[25]; m_MyCombo.GetWindowText(str,25); m_MyEdit.SetSel(0,-1); m_MyEdit.ReplaceSel(str); //}

  • GetWindowText GetWindowText(char,int) 12

  • Windows

  • MyRadio

  • Color MyRadioSpeed MyRadioReport Setting

  • MyRadio Visual C++ FileNew NewProject MFC AppWizard[exe] MyList OK

  • Step 1 Step 1Next Step 2 About Box Use 3D Controls Step 2NextMyRadio

  • Step 3 Step 3 NextMFC StandardMFCMyRadio

  • Step 4Finish Visual C++New Project Information Visual C++ OKMyRadio

  • MyRadio MyRadioAppWizardAppWizardAppWizard IDD_MYRADIO_DIALOG

  • MyRadio

    IDCaptionIDD_MYRADIO_DIALOGMyRadioIDC_RED_RADIORedIDC_GREEN_RADIOGreenIDC_STATICColorIDC_20_RADIO20MPHIDC_55_RADIO55MPHIDC_70_RADIO70MPHIDC_STATICSpeedIDC_MY_EDITIDC_REPORT_BUTTONReport Setting

  • MyRadioMyRadio

  • Red Group Speed Group Group Resoures Symbols

  • MyRadio IDD_MYRADIO_DIALOGClassWizard

    IDIDC_RED_RADIOm_RedRadioControlCButtonIDC_20_RADIOm_20RadioValueintIDC_MY_EDITm_MyEditControlCEdit

  • IDD_MYRADIO_DIALOGWM_INITDIALOG ClassWizard ClassWizardMassage Maps ClassWizardCMyRadioDlg->CMyRadioDlg->WN_INITDIALOG

  • // TODO: Add extra initialization here//Red55MPH// CheckRadioButton(IDC_RED_RADIO, IDC_GREEN_RADIO, IDC_GREEN_RADIO); m_SpeedRadio=2; UpdateData(FALSE);//CheckRadioButton(1, 2, 3GreenSpeed70MPH

  • void CMyRadioDlg::OnReportButton() { // TODO: Add your control notification handler code here // char str[50]; int n; n=GetCheckedRadioButton( IDC_RED_RADIO,IDC_GREEN_RADIO); if(n==0) strcpy(str, "Color: None"); else if(n==IDC_RED_RADIO) strcpy(str, "Color: Red"); else if(n==IDC_GREEN_RADIO) strcpy(str, "Color: Green");

  • UpdateData(TRUE); if(m_SpeedRadio==0)strcat(str," Speed: 20MPH");else if(m_SpeedRadio==1)strcat(str," Speed: 55MPH"); else if(m_SpeedRadio==2)strcat(str," Speed: 70MPH"); m_MyEdit.SetSel(0,-1); m_MyEdit.ReplaceSel(str);//}UpdateData(FALSE)UpdateData(TRUE)

  • Cwnd CheckRadioButton(1, 2, 3); 1ID 2ID 3ID GetCheckedRadioButton(1, 2); ID 1ID 2ID

  • CAboutDlg dlgAbout; dlgAbout.DoModal( );ShellExecute(NULL, NULL, "MyCombo.exe", NULL, "D:\\vc\\MyComb\\Debug", SW_SHOWNORMAL);

  • MyDialog

  • MyDialog Enter Data ok Display Data

  • IDCaptionIDD_MYDIALOGMyDialog IDC_EXIT_BUTTONE&xit IDC_ENTERDATA_BUTTONEnterData IDC_DISPLAYDATA_BUTTONDisplay Data IDC_ENTERSPEED_BUTTONEnterSpeed IDC_DISPLAYSPEED_BUTTONDisplay Speed

  • InsertResourceInsert ResourceDialogNew

  • IDD_DIALOG1 ViewClassWizardAdd Class Create a new class OKNew Class

  • CMyDlgCDialogIDD_DIALOG1

  • CMyDlg IDD_DIALOG1CMyDlg CMyDialogDlgAdd Member Variable

  • dlg1 Enter DataMyDialogdlg1 Enter Datavoid CMyDialogDlg::OnEnterdataButton() {// TODO: Add your control notification handler code here//dlg1.DoModal();//}

  • IDD_DIADOG1IDIDC_DATA_EDITm_DataEditValueCstring

  • Display Data DisplayDataMyDialogvoid CMyDialog1Dlg::OnDisplaydataButton() {// TODO: Add your control notification handler code here//MessageBox(dlg1.m_DataEdit);//}

  • EnterSpeedMyDialog IDD_DIALOG2

    IDIDD_DIALOG2IDD_SPEED_SCROLLIDC_SPEED_EDIT

  • IDD_DIALOG2 ViewClassWizardAdd Class Create a new class OKNew Class CSpeedDlgCDialog

  • CSpeedDlg IDD_DIALOG2CSpeedDlg CMyDialogDlgAdd Member Variable

  • Enter Speedvoid CMyDialogDlg::OnEnterspeedButton() {// TODO: Add your control notification handler code here//dlg2.DoModal();//}

  • CSpeedDlgBOOL CSpeedDlg::OnInitDialog() {CDialog::OnInitDialog();// TODO: Add extra initialization herem_SpeedScroll.SetScrollRange(0,100);m_SpeedScroll.SetScrollPos(50);

    m_SpeedEdit=m_SpeedScroll.GetScrollPos();UpdateData(FALSE);return TRUE;}

  • IDD_DIALOG2 CSpeedDlgWM_HSCROLL WM_HSCROLL

    ID IDC_SPEED_EDIT m_SpeedEdit Valueint IDC_SPEED_SCROLLBAR m_SpeedScroll ControlCScrollBar

  • void CSpeedDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {int n;switch(nSBCode){case SB_THUMBTRACK:m_SpeedScroll.SetScrollPos(nPos); break;case SB_LINEUP:n=m_SpeedScroll.GetScrollPos(); n--;if(n100) n=100;m_SpeedScroll.SetScrollPos(n); break;WM_HSCROLL

  • case SB_PAGEUP:n=m_SpeedScroll.GetScrollPos(); n=n-10;if(n100) n=100;m_SpeedScroll.SetScrollPos(n); break;}m_SpeedEdit=m_SpeedScroll.GetScrollPos();UpdateData(FALSE);CDialog::OnHScroll(nSBCode, nPos, pScrollBar);}WM_HSCROLL

  • Display Speedvoid CMyDialogDlg::OnDisplayspeedButton() {// TODO: Add your control notification handler code here//int n=dlg2.m_SpeedEdit;char str[50];sprintf(str,"Speed:%d",n);MessageBox(str);//}

  • 2. 3. 4.

  • VCMFC (SDI) (MDI)

  • Word

  • --WM_COMMANDWindows

  • ()

    () -

  • MySdi

  • Memo

  • Memo 6

  • IDCaptionID_STATICMEMOIDD_MEMO_FORM IDC_STATICDateIDC_DATE_EDITIDC_STATICRefIDC_REF_EDITIDC_MEMO_EDIT

  • IDD_MEMO_FORM IDD_MEMO_FORMClassWizard

    IDIDC_DATE_EDITm_DateEditValueCStringIDC_REF_EDITm_RefEditValueCStringIDC_MEMO_EDITm_MemoEditValueCString

  • MEMO m_DateEdit, m_RefEdit, m_MemoEdit (CMemoView) CMemoDOCAdd Member Variable CString m_Date; CString m_Ref; CString m_Memo;

  • OnNewDocument ClassWizardCMemoDoc->CMemoDoc->OnNewDocument

  • long lTime;time(&lTime);struct tm *newtime=localtime(&lTime);//char CurrentTime[30];strcpy(CurrentTime, asctime(newtime));CurrentTime[24]='\0';//m_Date=CurrentTime;m_Ref="";m_Memo="";

  • OnInitialUpdate() ClassWizardCMemoView->CmemoView->OnInitialUpdate

  • CMemoDoc *pDoc=GetDocument();m_DateEdit=pDoc->m_Date;m_RefEdit=pDoc->m_Ref;m_MemoEdit=pDoc->m_Memo;UpdateData(FALSE);

  • ClassWizardCMemoView->IDC_DATE->EN_CHANGE OnChangeDate()EN_CHANGEIDC_DATEOnChangeDate()

  • void CMemoView::OnChangeDate() {// TODO: Add your control notification handler code hereUpdateData(TRUE);CMemoDoc*pDoc=GetDocument();pDoc->m_Date=m_DateEdit;pDoc->SetModifiedFlag();}

  • void CMemoView::OnChangeRef() {// TODO: Add your control notification handler code hereUpdateData(TRUE);CMemoDoc*pDoc=GetDocument();pDoc->m_Ref=m_RefEdit;pDoc->SetModifiedFlag();}

  • void CMemoView::OnChangeRef() {// TODO: Add your control notification handler code hereUpdateData(TRUE);CMemoDoc *pDoc=GetDocument();pDoc->m_Memo=m_MemoEdit;pDoc->SetModifiedFlag();}

  • SaveSave AsOpen Serialize()FileSaveSave AsOpenSerialize()

  • void CMemoDoc::Serialize(CArchive& ar){if (ar.IsStoring()){ arm_Memo;}}