windows 程序设计

211
Windows 程序设计 主讲:王茂芝 副教授 wangmz@c dut.edu.cn

Upload: sol

Post on 18-Mar-2016

136 views

Category:

Documents


6 download

DESCRIPTION

Windows 程序设计. 主讲:王茂芝 副教授 [email protected]. 参考文献. [1] Windows 程序设计 [ 第 5 版 , 上下册 ] 北京大学出版社 2004 年 , ¥ 160 [2] 黄维通 . Visual C++ 面向对象与可视化程序设计 , 清华大学出版社 ,2000 年 , ¥ 26 [3] 王世同 . VC++6.0 编程基础 , 清华大学出版社 ,1999 年 , ¥ 19.8 [4] 刘文智 . VC++6.0 教程 , 电子工业出版社 , 2000 年 , ¥ 35. 几个概念. C C++ - PowerPoint PPT Presentation

TRANSCRIPT

  • Windows [email protected]

  • [1] Windows[5,] 2004, 160[2] . Visual C++,,2000,26[3] . VC++6.0, ,1999,19.8[4] . VC++6.0, , 2000, 35

  • CC++VC++MFCWindows

  • APIMFCVC++ 6.0Visual Studio()OS(Win32)

  • windowsC:Cwindows32C.,MS VC++ 6.0

  • 1.1 windowsWindows1981,IBM PC,PCMS-DOS.,.WindowsMS198311,198511.()Windows2.0198711.()Windows3.01990522.MS windows3.119924.19937windows NT32windows.Windows9519958.(32)Windows9819986.

  • WindowsWindows98windows NT32.Windows(GUI).GUI.WYSIWYG( what you see is what you get:).

  • Windows.Windows,.DLL.Kernel32.dll:I/O.User32.dll,.GDI32.dll,.

  • ()windows,windowsC.C,windowsDLL.

  • 1.2 windowsAPI,API.API,.16windowsAPI(windows1.0windows3.0)win16.32windowsAPI(windows95windows98windows NT)win32.

  • windowsCAPIwindows.,windows.MS VBBorland DelphiMFCC++windows.JavaWindows,API,.

  • MS VC++6.0,.MS VC++Cwindows.MSDN: microsoft developer network

  • API http://www.microsoft.com/msdn/

  • 1.3 windows #include stdio.h int main(){ printf(hello, world\n); return 0;}

  • Windowsinclude,,. #include windows.h int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){ MessageBox(NULL,TEXT(Hello,Windows 98!),TEXT(HelloMsg),0); return 0;}

  • Windows.h.windows,.:WINDEF.H WINNT.H UniodeWINBASE.H WINUSER.H WINGDI.H

  • Cmain, windowsWinMainWinMainWinMainNULLWinMain.windows.WinMain.,.

  • MessageBoxMessageBoxWINUSER.HMB_.

  • ,C.OBJ,.OBJ.LIB.EXE.

  • windows,.,,.

  • 2.1 ,CreateWindows.CreateWindows,,.

  • .,..,.windows.

  • windows:,windows.,.,.Windows.

  • ?windows., windows.,.,windows,windows,.windows.,,windows.

  • .,,.windows,,windows.,..,.,windows.windows.

  • ,.,,,windows..Windows,windows,.,,..,.

  • HELLOWIN,.windows.VC++6.0

  • ,hellowin.cWndProc,,WinMainWndProc,.

  • WindowsLoadIconLoadCursorGetStockObjectRegisterClassMessageBoxCreateWindowShowWindowUpdateWindowGetMessage

    TranslateMessageDispatchMessagePlaySoundBeginPaintGetClientRectDrawTextEndPaintPostQuitMessageDefWindowProc

  • ..windows,,, windows.CS CW DT IDI IDIDC IDMB SND WM WS

  • MSG WNDCLASS PAINTSTRUCT RECT

  • (32),.windowsCMS-DOS.windows.windows,. HINSTANCE () HWND HDC

  • windows.,.,,..

  • c charWCHARTCHAR by BYTE n short i int x,y intxy cx,cy intxy b,f BOOL(int);flag w WORDshort l LONG dw DWORD fn s string() sz 0 h p

  • ,RegisterClass.,WNDCLASS.WNDCLASS....,.

  • ,.CreateWindow,.windows,.,.RegisterClass,CreateWindow.

  • CreateWindow,window.,windows,CreateWindow,windows.

  • Windowswindows., windows,..

  • .,.windows,RegisterClass.CreateWindow.,.,windows.

  • ,windowsswitchcase,.,0.DefWindowProcwindows.DefWindowProc.DefWindowProc,.

  • WM_PAINTwindows.,,.

  • 2.2 windowsC,main,WinMain..Windows.,windows,.

  • ,Windows.windows.windows,.windowsWM,WINUSER.H.

  • ,,.,(),.GetMessageWindowsDispatchMessage

  • VC++:P47()

  • VC++WindowsAFXAppWizard

  • windows,windows

  • :MFC AppWizard(exe),,.exe.

  • AppWizard,example2ResourceView.,AppWizard,.

  • ,MFC,. Example2CEdit,,CEdit.,..:m_Edit11CString,CEdit,CEdit.

  • ,,want return,,,,,,.

  • Show1,,,,.m_Edit1.SetSel(0,-1);m_Edit1.ReplaceSel("Welcome to you! This is a EditBox.");

  • Clear1m_Edit1.SetSel(0,-1);m_Edit1.ReplaceSel("");Show2Clear2

  • IDC_COPY_BUTTONIDC_COPY_BUTTON->,.CEdit.m_Edit1.SetSel(0,-1);m_Edit1.Copy();m_Edit2.SetSel(0,-1);m_Edit2.ReplaceSel("");m_Edit2.Paste();:,.Copy()m_Edit1,m_Edit1,Paste()m_Edit2,m_Edit2.

  • UndoUndoCEdit,OK

  • ,windows.

  • 1

  • 2 :MFC AppWizard(exe)

  • 3 .,,,..

  • 4 m_Edit1m_Scrollbar

  • ,,,020.,10.,,.OnInitDialog().

  • m_Scrollbar.SetScrollRange(0,20);m_Scrollbar.SetScrollPos(10);char sPos[10];itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit1.SetSel(0,-1);m_Edit1.ReplaceSel(sPos);UpdateData(FALSE); itoa()

  • Exit OnOK(),.

  • Object IDsIDC_SCROLLBAR,Message.,.ClassWizard,Object IDsCExam3Dlg,MessagesWM_HSCROLL,,Member functionsOnHScroll(),,.,CExam3Dlg,,?

  • ()void CExam3Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) ,,,...

  • (),,WM_SCROLL,OnHScroll().,,?,OnHScroll().

  • (),nSBCodeSB_THUMBTRACK,nSBCodeSB_LINEDOWNSB_LINEUP.SB_PAGEDOWN,SB_PAGEUP,.

  • Leftm_Scrollbar.SetScrollPos(0);m_Edit1.SetSel(0,-1);m_Edit1.ReplaceSel("0");Rightm_Scrollbar.SetScrollPos(20);m_Edit1.SetSel(0,-1);m_Edit1.ReplaceSel(20");

  • Resetm_Scrollbar.SetScrollPos(10);m_Edit1.SetSel(0,-1);m_Edit1.ReplaceSel(10");

  • ,,.

  • 1

  • 2 :MFC AppWizard(exe)

  • 3 ,,,

  • 4 IDC_DATE_CHECKm_DateCheckIDC_TIME_CHECKm_TimeCheckIDC_DATE_EDITm_DateEditIDC_TIME_EDITm_TimeEdit

  • ExitOnOK();

  • ,IDC_DATE_CHECKUpdateData(TRUE);if(m_DateCheck==TRUE){CTime tNow;tNow=CTime::GetCurrentTime();CString sNow=tNow.Format("%Y.%m.%d");m_DateEdit.SetSel(0,-1);m_DateEdit.ReplaceSel(sNow);}else{m_DateEdit.SetSel(0,-1);m_DateEdit.ReplaceSel("");}UpdateData(FALSE);

  • ()UpdateData(TRUE),,.,.if.UpdateData(FALSE).,,CEdit,CString,.

  • ,IDC_TIME_CHECKUpdateData(TRUE);if(m_TimeCheck==TRUE){CTime tNow;tNow=CTime::GetCurrentTime();CString sNow=tNow.Format("%I.%M.%S");m_TimeEdit.SetSel(0,-1);m_TimeEdit.ReplaceSel(sNow);}else{m_TimeEdit.SetSel(0,-1);m_TimeEdit.ReplaceSel("");}UpdateData(FALSE);

  • EnableDisableGetDlgItem(IDC_DATE_CHECK)->EnableWindow(TRUE);GetDlgItem(IDC_TIME_CHECK)->EnableWindow(TRUE);m_DateEdit.EnableWindow(TRUE);m_TimeEdit.EnableWindow(TRUE);,.GetDlgItem()CWnd,CDialogCWnd,CExam4DlgCDialog,CExam4DlgCWnd,CWnd.,

  • (EnableDisable)?,CEdit,.BOOL,CButton,.

  • (EnableDisable)DisableGetDlgItem(IDC_DATE_CHECK)->EnableWindow(FALSE);GetDlgItem(IDC_TIME_CHECK)->EnableWindow(FALSE);m_DateEdit.EnableWindow(FALSE);m_TimeEdit.EnableWindow(FALSE);

  • ShowHideGetDlgItem(IDC_DATE_CHECK)->ShowWindow(SW_SHOW);GetDlgItem(IDC_TIME_CHECK)->ShowWindow(SW_SHOW);m_DateEdit.ShowWindow(SW_SHOW);m_TimeEdit.ShowWindow(SW_SHOW);,.

  • (ShowHide)ShowHideGetDlgItem(IDC_DATE_CHECK)->ShowWindow(SW_HIDE);GetDlgItem(IDC_TIME_CHECK)->ShowWindow(SW_HIDE);m_DateEdit.ShowWindow(SW_HIDE);m_TimeEdit.ShowWindow(SW_HIDE);ShowWindow()CWnd,,SW_SHOW,SW_HIDE.

  • :

  • ,windows.,,,,.

  • 1

  • 2 :MFC AppWizard(exe)

  • 3 ID,ID.,ID.,.

  • .,Group,sexMaleGroup,AgeOldGroup.,,.,ID,,.

  • 4 IDC_MALE_RADIOm_MaleRadio,Control,CButton.IDC_OLD_RADIOm_OldRadio,Control,CButton.m_Edit,Control,CEdit.:,.

  • OnInitDialog(),CheckRadioButton(IDC_MALE_RADIO,IDC_FEMALE_RADIO,IDC_MALE_RADIO);CheckRadioButton(IDC_OLD_RADIO,IDC_CHILD_RADIO,IDC_YONG_RADIO);UpdateData(FALSE);CheckRadioButton()ID,ID,ID.

  • ExitOnOK();

  • (Show)char sEdit[30];int iMaleRadio;int iOldRadio;iMaleRadio=GetCheckedRadioButton(IDC_MALE_RADIO,IDC_FEMALE_RADIO);if(iMaleRadio==IDC_MALE_RADIO)strcpy(sEdit,"He is a ");if(iMaleRadio==IDC_FEMALE_RADIO)strcpy(sEdit,"She is a ");

    iOldRadio=GetCheckedRadioButton(IDC_OLD_RADIO,IDC_CHILD_RADIO);if(iOldRadio==IDC_OLD_RADIO)strcat(sEdit,"old.");if(iOldRadio==IDC_YONG_RADIO)strcat(sEdit,"yong.");if(iOldRadio==IDC_CHILD_RADIO)strcat(sEdit,"child.");m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sEdit);

  • ,,.,,,,,.

  • 1

  • .,,Age,,,,,.

  • 2 :MFC AppWizard(exe)

  • 3 :,,,.:maleGroup.,,.

  • 4 IDC_MALE_RADIOm_MaleRadio.Value,int.:,m_MaleRadioCButton,int,,.IDC_AGE_COMBOBOXm_AgeCombo.Control,CComboBox.:,CString,,CEdit.

  • m_MaleRadio=0;m_AgeCombo.AddString("old.");m_AgeCombo.AddString("young.");m_AgeCombo.AddString("child.");m_AgeCombo.SelectString(-1,"young");UpdateData(FALSE);

  • ExitOnOK();

  • ShowUpdateData(TRUE);char sMaleEdit[30];char sAgeEdit[15];int iMaleRadio;iMaleRadio=GetCheckedRadioButton(IDC_MALE_RADIO,IDC_FEMALE_RADIO);if(iMaleRadio==IDC_MALE_RADIO)strcpy(sMaleEdit,"He is a ");if(iMaleRadio==IDC_FEMALE_RADIO)strcpy(sMaleEdit,"She is a ");m_AgeCombo.GetWindowText(sAgeEdit,15);strcat(sMaleEdit," ");strcat(sMaleEdit,sAgeEdit);m_Edit=_T(sMaleEdit);UpdateData(FALSE);

  • ,sAgeEdit.GetWindowText(),,,.

  • .,VC++AppWizard.,,.

  • 1

  • 2 :MFC AppWizard(exe)

  • 3 :Voice,Show,Exit

  • AppWizard,.InsertResource.MenuNew

  • ,,.,,CExam7Dlg.,,ClassWizard.

  • ,,..,,Propertis.

  • 4 FileExitOnOK();

  • FileVoiceMessageBeep((WORD)-1);DWORD iTime=GetCurrentTime();while(GetCurrentTime()
  • FileShowMessageBox("This is a sample of adding a menu.");

  • HelpAboutMessageBox("This is a sample. Version 12.0");

  • ,VoiceVoice,OnVoiceButton()OnVoiceMenu(),CExam7Dlg,OnVoiceButton()OnVoiceMenu().

  • Windows,,.,,.,..

  • 1

  • 2 :MFC AppWizard(exe)

  • 3 ,,AppWizard..

  • AppWizard,,.InsertResource,:,

  • ,,.:CMyDlg1

  • IDD_DIALOG1IDD_DIALOG1,,ClassWizard.IDC_LISTm_List,Control,CListBox

  • 4 Exit OnOK();

  • CMyDlg1IDD_MYDLG1CMyDlg1,,,.,,CExam8Dlg.,Exam8.h,Exam8Dlg.h

  • CMyDlg1()// Constructionpublic:CExam8Dlg(CWnd* pParent = NULL);// standard constructorCMyDlg1 m_MyDlg1;,Exam8Dlg.hCMyDlg1MyDlg1.h#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000

    #include "MyDlg1.h"

  • CMyDlg1()CMyDlg1m_MyDlg1,CMyDlg1IDD_DIALOG1,m_MyDlg1IDD_MyDlg1,m_MyDlg1,IDD_MyDlg1.

  • IDD_MYDLG1IDD_MYDLG1,,.,.CDialogOnInitDialog(),,.IDD_MYDLG1.

  • IDD_MYDLG1()BOOL CMyDlg1::OnInitDialog() {CDialog::OnInitDialog();// TODO: Add extra initialization herem_List.AddString("This is a book.");m_List.AddString("This is a desk.");m_List.AddString("This is a computer.");m_List.AddString("This is a pen.");

    return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE}

  • OKvoid CMyDlg1::OnOkButton() {// TODO: Add your control notification handler code herem_List.GetText(m_List.GetCurSel(),sList);OnOK();}

  • OK(),sList.,sList.OnOKButton(),,,,CMyDlg1,.MyDlg1.hCMyDlg1.class CMyDlg1 : public CDialog{// Constructionpublic:CMyDlg1(CWnd* pParent = NULL); // standard constructorCString sList;// Dialog Data};

  • Cancelvoid CMyDlg1::OnCancelButton() {// TODO: Add your control notification handler code hereOnCancel();}

  • Selectvoid CExam8Dlg::OnSelectButton() {// TODO: Add your control notification handler code herem_MyDlg1.DoModal();}m_MyDlg,,,.

  • Displayvoid CExam8Dlg::OnDisplayButton() {// TODO: Add your control notification handler code hereMessageBox(m_MyDlg1.sList);}

  • 11 Windows,,.,,.,,.,,.

  • 1

  • 2 ,Single document..

  • 3 .,,,.

  • AppWizardEditv, Show.Menu,Delete,Help.. ID_SHOW_MESSAGE1,2,3.

  • ResourceViewToolbar,IDR_MAINFRAME..,4.IDID_SHOW_MESSAGE1,2,3,.,.

  • ResourceViewMenu,IDD_MAINFRIME..ShowMessage1.Message1.Prompt.,,.,,.

  • \nMessage1,2,3

  • 4 Message1,2,3ViewAppWizardClass nameCExam9ViewObject IDsID_SHOW_MESSAGE1MessageBox(This is a Message1,2,3 test.);

  • 5

  • /(SDI)(MDI).,,MFC AppWizard.,.

  • 1 /.,.,.,,.word

  • 2 ,both container and server,,,CRichEditView,,.

  • 3

  • 4

  • ,VC++ 6.0,.

  • 1 ,.C++,,.Dynamic Link Library,DLL,.,,.

  • ,,,.,,,.,.

  • ,.DLL:Windows/SYSTEM

  • 2 Win32MFCMFC

  • 3 .cppDLL..defDLLDLLWindows,,DLL,DLL.

  • .cppMessage():int Message(void){MessageBox(NULL,"This is the example of testing DLL.",NULL,MB_ICONEXCLAMATION);return 1;},:int Message(void);

  • .defdefDLL,defcpp,;,//Build.dll.

  • 4

  • 5 MFC App (exe)

  • 6

  • 7 HINSTANCE handleDLL=NULL;typedef int(*MESSAGE)(void);MESSAGE Message;,NULL,.MESSAGE,,,MESSAGE,,,.

  • Load.dllvoid CMainFrame::OnDllLoad() {if(handlerDLL!=NULL){MessageBox("The OneDLL has been loaded.");return;}handlerDLL=LoadLibrary("OneDLL.DLL");if(handlerDLL==NULL){MessageBox("Cannot Load the OneDLL.DLL");}Message=(MESSAGE)GetProcAddress(handlerDLL,"Message");}

  • Test.dllvoid CTestDLLView::OnDllTest() {// TODO: Add your command handler code hereif(handlerDLL==NULL){MessageBox("Please Load the OneDLL.DLL first.");return;}Message();}

  • 8 ,:Windows/SYSTEM

  • 1

  • (GDI).MFCGDI,.CGdiObject.

  • (Device Context,DC),.windows,GDI(DC)....

  • GDICPen.: int nPenStyle()PS_SOLIDPS_DASHPS_DOTPS_DASHDOTPS_DASHDOTDOTPS_NULL

  • GDICBrush int nIndex()HS_BDIAGONALHS_CROSSHS_DIAGCROSSHS_FDIAGONALHS_HORIZONTALHS_VERTICAL

  • 2 SDIMFC AppWizard(exe)

  • 3

  • (T)

  • (P)

  • (W)

  • (C)

  • (B)

  • 4 ClassView,Classes,,

  • int m_yy;int m_bx;int m_ys;int m_xh;bool m_yyzx;bool m_yyhx;bool m_yyjc;bool m_yysz;bool m_yyxx;bool m_yyxs;bool m_sx;bool m_kx;bool m_yellow;bool m_blue;bool m_red;bool m_x5;bool m_x4;bool m_x3;bool m_x2;bool m_x1;bool m_dashdotdot;bool m_dashdot;bool m_dot;bool m_dash;bool m_solid;bool m_ellipse;bool m_rectangle;bool m_line;CPoint m_end;CPoint m_start;

  • CPaintView::CPaintView(){// TODO: add construction code herem_line=true;m_rectangle=false;m_ellipse=false;m_solid=true;m_dash=false;m_dot=false;m_dashdot=false;m_dashdotdot=false;m_x1=true;m_x2=false;m_x3=false;m_x4=false;m_x5=false;m_red=true;m_blue=false;m_yellow=false;m_kx=true;m_sx=false;m_yyxs=false;m_yyxx=false;m_yysz=false;m_yyjc=false;m_yyhx=false;m_yyzx=false;m_xh=1;m_bx=PS_SOLID;m_ys=RGB(0,0,0);m_yy=NULL;

    }

  • ON_COMMANDON_UPDATE_COMMAND_UI

  • (COMMAND)void CPaintView::OnLine() {// TODO: Add your command handler code herem_line=true;m_rectangle=false;m_ellipse=false;}

    void CPaintView::OnRectangle() {// TODO: Add your command handler code herem_line=false;m_rectangle=true;m_ellipse=false;}

    void CPaintView::OnEllipse() {// TODO: Add your command handler code herem_line=false;m_rectangle=false;m_ellipse=true;}

  • (UPDATE_COMMAND_UI)void CPaintView::OnUpdateLine(CCmdUI* pCmdUI) {// TODO: Add your command update UI handler code herepCmdUI->SetCheck(m_line);}

    void CPaintView::OnUpdateRectangle(CCmdUI* pCmdUI) {// TODO: Add your command update UI handler code herepCmdUI->SetCheck(m_rectangle);}

    void CPaintView::OnUpdateEllipse(CCmdUI* pCmdUI) {// TODO: Add your command update UI handler code herepCmdUI->SetCheck(m_ellipse);}

  • (COMMAND)void CPaintView::OnPsSolid() {// TODO: Add your command handler code herem_solid=true;m_dash=false;m_dot=false;m_dashdot=false;m_dashdotdot=false;m_bx=PS_SOLID;}

    void CPaintView::OnPsDash() {// TODO: Add your command handler code herem_solid=false;m_dash=true;m_dot=false;m_dashdot=false;m_dashdotdot=false;m_bx=PS_DASH;}

  • void CPaintView::OnPsDot() {// TODO: Add your command handler code herem_solid=false;m_dash=false;m_dot=true;m_dashdot=false;m_dashdotdot=false;m_bx=PS_DOT;}

    void CPaintView::OnPsDashdot() {// TODO: Add your command handler code herem_solid=false;m_dash=false;m_dot=false;m_dashdot=true;m_dashdotdot=false;m_bx=PS_DASHDOT;}

  • void CPaintView::OnPsDashdotdot() {// TODO: Add your command handler code herem_solid=false;m_dash=false;m_dot=false;m_dashdot=false;m_dashdotdot=true;m_bx=PS_DASHDOTDOT;}

  • (UPDATE_COMMAND_UI)void CPaintView::OnUpdatePsSolid(CCmdUI* pCmdUI) {// TODO: Add your command update UI handler code herepCmdUI->SetCheck(m_solid);}

    void CPaintView::OnUpdatePsDash(CCmdUI* pCmdUI) {// TODO: Add your command update UI handler code herepCmdUI->SetCheck(m_dash);}

    void CPaintView::OnUpdatePsDot(CCmdUI* pCmdUI) {// TODO: Add your command update UI handler code herepCmdUI->SetCheck(m_dot);}

    void CPaintView::OnUpdatePsDashdot(CCmdUI* pCmdUI) {// TODO: Add your command update UI handler code herepCmdUI->SetCheck(m_dashdot);}

    void CPaintView::OnUpdatePsDashdotdot(CCmdUI* pCmdUI) {// TODO: Add your command update UI handler code herepCmdUI->SetCheck(m_dashdotdot);}

  • (COMMAND)void CPaintView::OnX1() {// TODO: Add your command handler code herem_x1=true;m_x2=false;m_x3=false;m_x4=false;m_x5=false;m_xh=1;}

    void CPaintView::OnX2() {// TODO: Add your command handler code herem_x1=false;m_x2=true;m_x3=false;m_x4=false;m_x5=false;m_xh=2;}

  • void CPaintView::OnX3() {// TODO: Add your command handler code herem_x1=false;m_x2=false;m_x3=true;m_x4=false;m_x5=false;m_xh=3;}

    void CPaintView::OnX4() {// TODO: Add your command handler code herem_x1=false;m_x2=false;m_x3=false;m_x4=true;m_x5=false;m_xh=4;}

  • void CPaintView::OnX5() {// TODO: Add your command handler code herem_x1=false;m_x2=false;m_x3=false;m_x4=false;m_x5=true;m_xh=5;}

  • (UPDATE_COMMAND_UI)void CPaintView::OnUpdateX1(CCmdUI* pCmdUI) {// TODO: Add your command update UI handler code herepCmdUI->SetCheck(m_x1);}

    void CPaintView::OnUpdateX2(CCmdUI* pCmdUI) {// TODO: Add your command update UI handler code herepCmdUI->SetCheck(m_x2);}

    void CPaintView::OnUpdateX3(CCmdUI* pCmdUI) {// TODO: Add your command update UI handler code herepCmdUI->SetCheck(m_x3);}

    void CPaintView::OnUpdateX4(CCmdUI* pCmdUI) {// TODO: Add your command update UI handler code herepCmdUI->SetCheck(m_x4);}

    void CPaintView::OnUpdateX5(CCmdUI* pCmdUI) {// TODO: Add your command update UI handler code herepCmdUI->SetCheck(m_x5);}

  • (COMMAND)void CPaintView::OnRed() {// TODO: Add your command handler code herem_red=true;m_blue=false;m_yellow=false;m_ys=RGB(255,0,0);}

    void CPaintView::OnBlue() {// TODO: Add your command handler code herem_red=false;m_blue=true;m_yellow=false;m_ys=RGB(0,0,255);}

    void CPaintView::OnYellow() {// TODO: Add your command handler code herem_red=false;m_blue=false;m_yellow=true;m_ys=RGB(0,255,0);}

  • (UPDATE_COMMAND_UI)void CPaintView::OnUpdateBlue(CCmdUI* pCmdUI) {// TODO: Add your command update UI handler code herepCmdUI->SetCheck(m_blue);}

    void CPaintView::OnUpdateRed(CCmdUI* pCmdUI) {// TODO: Add your command update UI handler code herepCmdUI->SetCheck(m_red);}

    void CPaintView::OnUpdateYellow(CCmdUI* pCmdUI) {// TODO: Add your command update UI handler code herepCmdUI->SetCheck(m_yellow);}

  • (COMMAND)void CPaintView::OnBsKx() {// TODO: Add your command handler code herem_kx=true;m_sx=false;m_yyxs=false;m_yyxx=false;m_yysz=false;m_yyjc=false;m_yyhx=false;m_yyzx=false;m_yy=NULL;}

    void CPaintView::OnBsSx() {// TODO: Add your command handler code herem_kx=false;m_sx=true;m_yyxs=false;m_yyxx=false;m_yysz=false;m_yyjc=false;m_yyhx=false;m_yyzx=false;m_yy=1;}

  • void CPaintView::OnBsHx() {// TODO: Add your command handler code herem_kx=false;m_sx=false;m_yyxs=false;m_yyxx=false;m_yysz=false;m_yyjc=false;m_yyhx=true;m_yyzx=false;m_yy=HS_HORIZONTAL;}

    void CPaintView::OnBsJc() {// TODO: Add your command handler code herem_kx=false;m_sx=false;m_yyxs=false;m_yyxx=false;m_yysz=false;m_yyjc=true;m_yyhx=false;m_yyzx=false;m_yy=HS_DIAGCROSS;}

  • void CPaintView::OnBsSz() {// TODO: Add your command handler code herem_kx=false;m_sx=false;m_yyxs=false;m_yyxx=false;m_yysz=true;m_yyjc=false;m_yyhx=false;m_yyzx=false;m_yy=HS_CROSS;}

    void CPaintView::OnBsXs() {// TODO: Add your command handler code herem_kx=false;m_sx=false;m_yyxs=true;m_yyxx=false;m_yysz=false;m_yyjc=false;m_yyhx=false;m_yyzx=false;m_yy=HS_BDIAGONAL;}

  • void CPaintView::OnBsXx() {// TODO: Add your command handler code herem_kx=false;m_sx=false;m_yyxs=false;m_yyxx=true;m_yysz=false;m_yyjc=false;m_yyhx=false;m_yyzx=false;m_yy=HS_FDIAGONAL;}

    void CPaintView::OnBsZx() {// TODO: Add your command handler code herem_kx=false;m_sx=false;m_yyxs=false;m_yyxx=false;m_yysz=false;m_yyjc=false;m_yyhx=false;m_yyzx=true;m_yy=HS_VERTICAL;}

  • (UPDATE_COMMAND_UI)void CPaintView::OnUpdateBsKx(CCmdUI* pCmdUI) {pCmdUI->SetCheck(m_kx);}

    void CPaintView::OnUpdateBsSx(CCmdUI* pCmdUI) {pCmdUI->SetCheck(m_sx);}

    void CPaintView::OnUpdateBsHx(CCmdUI* pCmdUI) {pCmdUI->SetCheck(m_yyhx);}

    void CPaintView::OnUpdateBsJc(CCmdUI* pCmdUI) {pCmdUI->SetCheck(m_yyjc);}

    void CPaintView::OnUpdateBsSz(CCmdUI* pCmdUI) {pCmdUI->SetCheck(m_yysz);}

    void CPaintView::OnUpdateBsXs(CCmdUI* pCmdUI) {pCmdUI->SetCheck(m_yyxs);}

    void CPaintView::OnUpdateBsXx(CCmdUI* pCmdUI) {pCmdUI->SetCheck(m_yyxx);}

    void CPaintView::OnUpdateBsZx(CCmdUI* pCmdUI) {pCmdUI->SetCheck(m_yyzx);}

  • : WM_LBUTTONDOWN(), WM_LBUTTONUP()

  • void CPaintView::OnLButtonDown(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultm_start=point;//m_end=point;//SetCapture();//RECT rect;GetClientRect(&rect);//ClientToScreen(&rect);//ClipCursor(&rect);//CView::OnLButtonDown(nFlags, point);}

  • void CPaintView::OnLButtonUp(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultm_end=point;//,ReleaseCapture();//ClipCursor(NULL);//CClientDC pDC(this);//pDC.SelectObject(CreatePen(m_bx,m_xh,m_ys));if(m_yy){if(m_sx){pDC.SelectObject(CreateSolidBrush(m_ys));}else{pDC.SelectObject(CreateHatchBrush(m_yy,m_ys));}}

  • ()if(m_line)//{pDC.MoveTo(m_start);//pDC.LineTo(m_end);//}if(m_rectangle)//{pDC.Rectangle(m_start.x,m_start.y,m_end.x,m_end.y);}if(m_ellipse){pDC.Ellipse(m_start.x,m_start.y,m_end.x,m_end.y);}CView::OnLButtonUp(nFlags, point);}

  • 5

  • ..,..windows(GDI),,.windows.

  • 3.1 windows,,.,,.windows,, windows.Windows.,.windowsWM_PAINT,.