孙鑫C++视频教程总结(内功=算法+数据结构+编译原理+操作系统原理+软件工程+英文).doc_第1页
孙鑫C++视频教程总结(内功=算法+数据结构+编译原理+操作系统原理+软件工程+英文).doc_第2页
孙鑫C++视频教程总结(内功=算法+数据结构+编译原理+操作系统原理+软件工程+英文).doc_第3页
孙鑫C++视频教程总结(内功=算法+数据结构+编译原理+操作系统原理+软件工程+英文).doc_第4页
孙鑫C++视频教程总结(内功=算法+数据结构+编译原理+操作系统原理+软件工程+英文).doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一:Windows程序运行原理及程序编写流程(创建窗口。回调函数方法1int WINAPI WinMain( /主函数HINSTANCE hInstance, / handle to current instanceHINSTANCE hPrevInstance, / handle to previous instance LPSTR lpCmdLine, / command line int nCmdShow / show state) WNDCLASS wndcls;/创建一个窗口对象 wndcls.cbClsExtra=0; /窗口类附加字节,为该类窗口所共享。通常0。 wndcls.cbWndExtra=0; /窗口附加字节。通常设为0。 wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);/背景 wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);/光标 wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);/位图(图标) wndcls.hInstance=hInstance; /当前应用程序事例句柄。 wndcls.lpfnWndProc=WinSunProc;/ 窗口过程函数(回调函数) wndcls.lpszClassName=Weixin2003;/ 窗口名/类的名字 wndcls.lpszMenuName=NULL;/菜单名 wndcls.style=CS_HREDRAW | CS_VREDRAW; /窗口的类型 RegisterClass(&wndcls);/注册窗口 HWND hwnd; hwnd=CreateWindow(Weixin2003,北京,WS_OVERLAPPEDWINDOW, 0,0,600,400,NULL,NULL,hInstance,NULL);/定义窗口句柄并创建窗口 ShowWindow(hwnd,SW_SHOWNORMAL);/显示窗口 UpdateWindow(hwnd);/更新窗口 MSG msg;/定义消息对象 /*做消息循环*/while(GetMessage(&msg, /接收消息的窗口句柄。/从消息队列中取出一条消息NULL, /消息标识。0,0)/做消息循环 TranslateMessage(&msg); /进行消息(如键盘消息)转换 DispatchMessage(&msg); /分派消息到窗口的回调函数处理, return 0;/回调函数原形为LRESULT CALLBACK WindowProc();LRESULT CALLBACK WinSunProc(/对消息的响应函数(回调函数) HWND hwnd, / handle to window UINT uMsg, / message identifier WPARAM wParam, / first message parameter LPARAM lParam / second message parameter) switch(uMsg) case WM_CHAR:break; case WM_LBUTTONDOWN: MessageBox(hwnd,mouse clicked,weixin,0); HDC hdc; hdc=GetDC(hwnd); TextOut(hdc,0,50,计算机编程语言培训,strlen(计算机编程语言培训); ReleaseDC(hwnd,hdc); break; case WM_PAINT: HDC hDC; PAINTSTRUCT ps; hDC=BeginPaint(hwnd,&ps); TextOut(hDC,0,0,维新培训,strlen(维新培训); EndPaint(hwnd,&ps); break; case WM_CLOSE: if(IDYES=MessageBox(hwnd,是否真的结束?,weixin,MB_YESNO) DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); 总结:创建一个完整的窗口需要经过下面四个操作步骤:一,设计一个窗口类;如:WNDCLASS wndcls;二,注册窗口类; 如:RegisterClass(&wndcls);三,创建窗口; 如:CreateWindow(),CreateWindowEX();四,显示及更新窗口。如:ShowWindow(),UpdateWindow();二:VC+掌握的基础使用VC编程除了良好的C基础外还需要掌握两方面:消息本身。不同消息所代表的用户操作和应用程序的状态。对于某个特定的消息来说,要让OS执行某个特定的功能去响应消息。二1消息的分类:标准消息,命令消息,通告消息。标准消息:除WM_COMMAND之外,所有以WM_开头的消息。命令消息:来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。通过标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。通告消息:由控件产生的消息,如按钮的单击。1)从CWnd派生的类,可以接收到标准消息 命令消息和通告消息。2)从CCmdTarget派生的类,只能可以接收到命令消息和通告消息。三:两种函数调用约定(_stdcall 和 _cdecl)#define CALLBACK _stdcall/_stdcall 标准调用预定,是PASCAL 调用约定,象DELPHI使用的就是标准调用约定#define WINAPIV _cdecl / _cdecl 是C 语言形式的调用约定。主要区别:函数参数传递顺序 和 对堆栈的清除上。问题:除了那些可变参数的函数调用外,其余的一般都是_stdcall约定。但 C/C+编译默然的是_cdecl约定。所以如果在VC等环境中调用_stdcall约定的函数,必须要在函数声明的时加上_stdcall 修饰符,以便对这个函数的调用是使用_stdcall约定(如使用DELPHI编写的DLL时候)。(VC中可通过这途径修改:project|settings.|c/c+|.)四:关于DC句柄获取(CpaintDC/CclientDC/CwindowDC在创建时默认)(调用这些函数)a)使用BeginPaint(),EndPaint()对。注意只能在响应WM_PAINT消息时使用。b)使用GetDc(),ReleaseDC()对。注意他们不能在响应WM_PAINT中使用。MFC中的运用为 HDC hdc=:GetDc(m_hWnd); :ReleaseDC(m_hWnd,hdc); 获得全局DC。 CDC *pDC=GetDC();ReleaseDC(pDC); CClientDC dc(this);(自动调用GetDc(),ReleaseDC()); CWindowDC dc(this); (自动调用GetDc(),ReleaseDC());五:MFC程序框架的剖析寻找WinMain人口:路径:visual c+安装目录下的:vc98|MFC|SRC|APPMODUL.CPP:寻找CWinApp构造函数:MFC|SRC|APPCORE.CPP:MFC程序框架主路线:CTEApp theApp- CWinApp:CWinApp()-_tWinMain()/进入程-AfxEndDeferRegisterClass(LONG fToRegister)- PreCreateWindow(创建、显示和更新窗口) pThread-Run(消息循环)- PumpMessage(/取消息并处理)类的运行顺序为:C*APP-CmainFram-C*View-C*Doc六:消息映射的三步骤:在头文件中声明消息响应函数原型。如:afx_msg void OnLButtonDown(UINT nFlags, CPoint point);在源文件中进行消息映射。如:ON_WM_LBUTTONDOWN()源文件中进行消息响应函数的定义。如:void CDrawView:OnLButtonDown(UINT nFlags, CPoint point)七:使用画笔、画刷、字体的步骤:(包括设计绘图模式SetROP2()CPen pen(PS_DOT,1,RGB(0,255,0);/构造画笔对象 CClientDC dc(this); CPen *pOldPen=dc.SelectObject(&pen);/将画笔选入DC后就可以作画了dc.SelectObject(pOldPen);CBrush *pBrush=CBrush:FromHandle(HBRUSH)GetStockObject(NULL_BRUSH);/构造透明画刷对象FromHandle()将对象句柄转换为对象指针GetStockObject()取得一个以预定义的画笔、画刷、字体的句柄.类为Cpen Cbrush CFont设计绘图模式: dc.SetROP2(R2_BLACK);(查MSDN).八:创建插入符:CDC类(文字等的输出类)CClientDC dc(this);TEXTMETRIC tm;dc.GetTextMetrics(&tm);/ 获取当前字体信息的度量CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);ShowCaret();/ void CreateCaret( CBitmap* pBitmap );/创建位图插入符/static void PASCAL SetCaretPos( POINT point );/设计插入符号的位置九:创建路径层:BOOL BeginPath( );/在这作图定义路径层剪切区域BOOL EndPath( );BOOL SelectClipPath( int nMode );/调用这个函数来使当前路径层剪切区域与新剪切区域进行互操作。 应用:当作图的时候,如果想要在整幅图形其中的某个部分和其它部分有所区别,我们可以把这部分图形放到路径层当中,然后指定调用指定互操作模式调用SelectClipPath( int nMode )函数来使路径层和覆盖在其上新绘图剪切区域进行互操作,达到特殊效果。十:设置定时器SetTimer(1,100,NULL);/放置定时1器并发送WM_TIMER消息作WM_TIMER消息响应并对Void OnTimer(UINT nIDEvent)编写代码。十一:CMenu类CMenu 类重要函数:CMenu*GetMenu得到窗口菜单栏对象指针。CMenu:GetSubMenu获得指向弹出菜单对象指针 / SetMenu( CMenu* pMenu ) 设置新菜单或移除菜单DrawMenuBar()/重绘菜单/其它菜单的功能设计用MSDN查函数十二:创建自定义菜单CMenu menu;/定义为局部对象menu.LoadMenu(IDR_MAINFRAME);SetMenu(&menu);menu.Detach();/ 这里menu对象作为一个局部对象。使用Detach()从menu对象中分离窗口菜单句柄,从而当menu对象析构的时候窗口菜单资源不随之销毁。也可将menu;定义为全局对象。十三:对弹出式菜单项的命令更新给菜单项添加UPDATE_COMMAND_UI消息响应在响应函数中调用CcmdUI类的成员函数。十四:向系统添加(右键弹出式)菜单(上下文菜单)1系统添加法: Project-Add to Project-Components and Controls-Visual C+ conpenets-pop-upMenue-Insert-选择类(不能选CmainFram)其中系统增加的内容:A一个菜单资源;B,在派生View类中增加了OnContextMenu()函数2系统添加法:用资源管理器添加一个菜单资源在鼠标右键消息响应函数中,加载菜单资源,并获得要显示的子菜单指针,并用该指针调用TrackPopupMenu函数便完成任务 代码如下:CMenu menu;menu.LoadMenu(IDR_MENU1);CMenu *pPopup=menu.GetSubMenu(0);ClientToScreen(&point); /将一个坐标点或一个矩形区域坐标转换成屏幕坐标。pPopup-TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,this); /在指定位置以指定的方式显示弹出菜单。也可对菜单项做消息响应。2动态添加菜单法:在CmainFram类的OnCreate()中创建Cmenu对象调用其成员函数添加、插入、删除子菜单、菜单项手动给动态菜单项添加响应函数一:在Resource.h中可以添加资源的ID二:在头文件中写消息函数原型三在代码文件中添加消息映射和添加消息响应函数(注意手动添加要放在ClassWizard的规定的外面)十五:集合类: COBArray,CStringArray,CDWordArray,CPtrArray,CStringArray,CUIntArray,CWordArray十六:在CMainFrame中截获对菜单命令的处理由于CWnd:OnCommand 是个虚函数,可以在框架类中重写OnCommand函数,从而可以截获菜单消息使它不再往下(VIEW类)路由。例:BOOL CMainFrame:OnCommand(WPARAM wParam, LPARAM lParam) int MenuCmdId=LOWORD(wParam);/取命令ID CMenu2View *pView=(CMenu2View*)GetActiveView();/获取当前VIEW类指针 if(MenuCmdId=IDM_PHONE1 & MenuCmdIdm_strArray.GetSize()/消息范围判断 CClientDC dc(pView); dc.TextOut(0,0,pView-m_strArray.GetAt(MenuCmdId-IDM_PHONE1);return TRUE; /函数返回,避免调用CFrameWnd:OnCommand函数,在CFrameWnd:OnCommand中截获的消息会交由VIEW类处理 return CFrameWnd:OnCommand(wParam, lParam); /调用基类OnCommand函数,在CFrameWnd:OnCommand中截获的消息会交由VIEW类处理十七:对话框类CDialog1 重要函数与成员变量一:每个窗口类创建的对象的同时都拥有一个窗口句柄m_hWnd的成员变量。二:GetDlgItem(IDC)= 关联一个变量; 通过控件ID 获得控件对象指针三:GetWindowText(CString& rString ) / /获得窗口、安键文本(char类型)四:int atoi( const char *string ); itoa()/ 把一个字符串与INT 类型的数值转为五:GetDlgItemText(IDC_EDIT1,ch1,10) =GetDlgItem(IDC_EDIT1)-GetWindowText(ch1,10);在一个窗口控件中直接读取文本到字符数组中六:INT GetDlgItemInt( ) /获得控件文本,并转换成数值类型七:SetFocus()设计窗口、控件的焦点。GetFocus()八;if(IDOK=dlg.DoModal()创建对话框后会等待用户作选择,就是DoModal、create的值。九:对编辑框Edit控件写入内容后会发送EN_change消息,2 问控件的六种方法:一:GetDlgItem(IDC_EDIT2)-Get(Set)WindowText(ch2,10);二:Get(Set)DlgItemText(IDC_EDIT2,ch2) 三:Get(Set)DlgItemInt(IDC_EDIT2) 四:每个控件关联一个变量,直接对变量进行操作。调用UpdateData()对控件取设计值。 或:变量.GetWindowText(ch1,10);取得数据 五:通过SDK函数或变量的成员函数发送WM消息完成消息任务::SendMessage(GetDlgItem(IDC_EDIT1)-m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1);六:直接给ID控件发送消息:SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);十八:创建扩展窗口(收缩、扩展窗口) 创建一个图表框通过ID获得其矩形的位置,并通过CRect对象记录其矩形位置。GetDlgItem(IDC_)-GetWindowRect(&rectSeparator); /获得窗口大小GetWindowRect(&rectLarge);创建两个CRect对象通过点的付值记录其矩形位置收缩、扩展时的矩形位置。SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),SWP_NOMOVE | SWP_NOZORDER);/设置窗口大小与位置十九:设计焦点事件(Tab Stop)先对改变焦点事件做消息响应(如对回车ID_OK的响应)后 GetFocus()-GetNextWindow()-SetFocus();/对最后一个不能判断。 GetFocus()-GetWindow(GW_HWNDNEXT)-SetFocus();/对最后一个不能判断。GetNextDlgTabItem(GetFocus()-SetFocus();/最好回车事件为窗口缺损消息由ONOK()响应,可通过对控件属性设计为缺损做消息响应以接收这个消息。廿:查看/改变对话框控件排列的秩序在对话框资源界面中:Layout-Tab Order-改顺序。廿一:逃跑按钮的巧妙实现创建多个Cbutton控件,并建立基于Cbutton类,类中包含一个本类的成员变量。将控件关联成这个类的一个变量,同时使自己的成员变量指向下个控件ShowWindow(SW_HIDE);使自己隐藏,通过其成员变量m_pBtn-ShowWindow(SW_SHOW)使对方显示廿二:如何制作属性页对话框和向导对话框CpropertySheet类CpropertyPage类创建属性页:insert-Resource-Dailog-选择后三个之一(如IDD_PROPPAGE_LARGE).为各页添加控件并为各页创建以CpropertyPage(属性表单页类)为基类的属性表单页类.以CPropertySheet为基类创建属性表单类,并在表单类中添加各表单页的对象。要加头文件。在表单类的构造函数中用AddPage(&m_prop1);添加各表页。在View中做消息响应做显示触发器。编代码:.1构造表单对象(设计表单名).2调用propSheet.DoModal()或Create()显示页面。(注: 创建向导对话框在.2前调用SetWizardMode()设计各页(上一步、下一步等) 限制用户在不满足设定的条件时切换到其他属性页和向导页。:.1 在各页中添加OnSetActive()虚函数.2用表单指针调用SetWizardButtons()来设计。如:(CPropertySheet*)GetParent()- SetWizardButtons(PSWIZB_NEXT);其响应函数为虚函数OnWizardNext/Back/Finish(查看MSDN) return 1不进入下一页。廿三:单选按钮操作方法:对所有单选按钮的第一个按钮属性设为Group,并为它们关联一个int类型的变量(使用时可按其编号访问)选择后(要按下一步或ok键)对按键作消息响应,用UpdateDate()对所选取值。对适当事件作消息响应通过一新的int类型的变量取这个关联的变量。使用选择值时作消息响应,通过变量作switch()case选择,通过str+=程序员等方式取值并将选择输出。使用完后在使用类的构造函数中对数组初始化廿四:复选按钮操作方法:对所有复选按钮都关联一个Bool类型的变量(使用时可按其编号访问)选择后(要按下一步或ok键)对按键作消息响应,用UpdateDate()对所选取值。(就一个函数)对适当事件作消息响应通过Bool类型数组记录每个关联变量的值。使用选择值时作消息响应,通过Bool类型数组多次if(m_bLike0)判断,通过str+=程序员等方式取值并将选择输出。使用完后在使用类的构造函数中用memset()对数组初始廿五: 组合框操作方法:CcomboBox类做OnInitDialog()虚函数消息响应通过AddString()初始化选项值。并通过(CComboBox*)GetDlgItem(IDC_COMBO2)-SetCurSel(0);负索引号值。对适当事件作消息响应通过int index=(CComboBox*)GetDlgItem(IDC_COMBO2)-GetCurSel();取得索引号。 (CComboBox*)GetDlgItem(IDC_COMBO2)-GetLBText(index,m_strSalary);通过索引号将值存入字符串中。对适当事件作消息响应通过新的CString类型变量记录这个字符串。使用选择值时作消息响应,通过CString类型变量以str+=程序员等方式直接使用。使用完后在使用类的构造函数中对数组初始化廿六:列表框操作方法:ClistBox类对所有复选按钮都关联一个CString类型的变量.并做OnInitDialog()虚函数消息响应通过AddString()初始化选项值。(CListBox*)GetDlgItem(IDC_LIST1)-AddString(北京);对适当事件作消息响应通过新的CString类型变量记录关联变量的选择值。使用选择值时作消息响应,通过CString类型变量以str+=程序员等方式直接使用。使用完后在使用类的构造函数中对数组初始化。廿七:解决添加类成功后ClassWizard找不到其.h/.cpp文件在本工程目录下删除.CLW 文件;.CLW 为管理类信息的文件。在工程中View-ClassWizard-是(输入这个文件名.CLW )廿八:修改MFC AppWizard向导生成的框架程序窗口的大小和标题:在CMainFrame类中在CMainFrame类中一法:在PreCreateWindow()中(窗口创建前)查MSDN的Frame-window stylescs.cx=300; cs.lpszName=;二法:在CMainFrame类的OnCreate()中:(窗口创建后)调用SetWindowLong()SetWindowLong(m_hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW);SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE) & WS_MAXIMIZEBOX);廿九:修改MFC AppWizard向导生成的框架程序窗口的图标:在CMainFrame类中PreCreateWindow()一:中同窗口的创建相同:WNDCLASS wndcls;-设计-注册-修改二cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW CS_VREDRAW,0,0,LoadIcon(NULL,IDI_WARNING);OnCreate()中三OnCreate()中加载系统图标:SetClassLong(m_hWnd,GCL_HICON,(LONG)LoadIcon(NULL,IDI_ERROR);四:加载自定义图标: m_hIcons0=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1); SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcons0);三十:修改MFC AppWizard向导生成的框架程序窗口的背景、光标:在CView类中PreCreateWindow()中一法:cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,LoadCursor(NULL,IDC_CROSS),(HBRUSH)GetStockObject(BLACK_BRUSH),0);OnCreate()中二法:SetClassLong(m_hWnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(BLACK_BRUSH); 背景SetClassLong(m_hWnd,GCL_HCURSOR,(LONG)LoadCursor(NULL,IDC_HELP); 光标卅一获得当前应用程序实例句柄的方法:一:AfxGetInstanceHandle()二:theApp.m_hInstance三:AfxGetApp()-m_hInstance,卅一:.工具栏按钮编程和手动添加工具栏 CToolBar类对菜单进行消息响应,对常用菜单在Resource的ToolBar中设计工具栏按钮,将其ID设计于菜单栏ID相同 手动添加工具栏查看MSDN的CToolBar类。也可查看CMainFrame:OnCreate()函数。卅二:向应用程序导入图标资源:将图标资源copy到本工程的.res目录下,insert-rousert-import导入图标资源卅三:对菜单进行消息响应使自定义工具栏显示和隐藏:m_newToolBar为工具栏类对象。1法:if(m_newToolBar.IsWindowVisible()m_newToolBar.ShowWindow(SW_HIDE);elsem_newToolBar.ShowWindow(SW_SHOW);RecalcLayout(); DockControlBar(&m_newToolBar);/ 工具栏停靠函数2法:ShowControlBar(&m_newToolBar,!m_newToolBar.IsWindowVisible(),FALSE);卅四:对状态栏的状态指示器编程(编写时钟显示)CstatusBar类在String Table资源中加入ID资源并在CmainFrame的头文件中建立一个CstatusBar类对象。在CmainFrame类.cpp的static UINT indicators结构第一个ID后添加这个ID.就可显示这个String。在OnCreate()通过Cstring对象格式化记录要输出的内容。这里是时间.CTime t=CTime:GetCurrentTime();CString str=t.Format(%H:%M:%S); 通过 CSize sz=dc.GetTextExtent(str);取得屏幕输出要的宽度。Int index=m_wndStatusBar.CommandToIndex( IDS_TIMER)/通过ID取得索引号并通过索引号设计窗格宽度类对象.SetPaneInfo(1,IDS_TIMER,SBPS_NORMAL,sz.cx); 类对象.SetPaneText(1,str);输出内容。在OnPaint()中重写代码,当窗口重绘时再只显示。卅五:对状态栏的指示行的编程在响应的类中作消息响应。并编代码。通过Cstring对象格式化记录要输出的内容如CString str; str.Format(x=%d,y=%d,point.x,point.y);显示(有四种方法)一:(CMainFrame*)GetParent()-m_wndStatusBar.SetWindowText(str); m_wndStatusBar为CstatusBar类对象二:(CMainFrame*)GetParent()-SetMessageText(str);三:(CMainFrame*)GetParent()-GetMessageBar()-SetWindowText(str);四:GetParent()-GetDescendantWindow(AFX_IDW_STATUS_BAR)-SetWindowText(str);AFX_IDW_STATUS_BAR为系统准备的状态栏ID号;卅六:进度栏的编写:CprogressCtr类在头文件中建立一个CprogressCtrr类对象。并在OnCreate()中通过对象创建一个进度栏。 卅七:发送自定义消息:在头文件中定义消息宏:#define UM_PROGRESS WM_USER+1作消息映射在要响应消息处通过SendMessage(UM_PROGRESS)或PostMessage(UM_PROGRESS)发送消息调用函数做要做的任务。SendMessage(UM_PROGRESS)发送消息马上调用函数ostMessage(UM_PROGRESS) 发送消息到消息队列中,并继续运行进程。卅八:为应用程序添加启动画面1系统添加法: Project-Add to Project-Components and Controls-Visual C+ conpenets-Splash Screen-Insert-选择类(不能选CmainFram)在Ontimer()中对显示时间做设计。如果手动添加可参看这个方法。卅九:使用标准颜色对话框,标准字体对话框(CcolorDialog类,CfontDialog类)颜色对话框:做消息响应并建立控件对象,CColorDialog dlg; 创建颜色对话框并通过对象的数据成员m_cc指向的结构取的选择的颜色dlg.m_cc.Flags|=CC_RGBINIT | CC_FULLOPEN;/设计标记if(IDOK=dlg.DoModal()COLORREF m_clr=dlg.m_cc.rgbResult;通过rgbResult的记录输出客户的选择。就可以在画笔、画刷、字体设计颜色。字体对话框(雷同):做消息响应并建立控件对象,CFontDialog dlg; 创建字体对话框并通过对象的数据成员m_cf指向的结构变量lpLogFont的字体值初始化自定义字体CFont m_font.CreateFontIndirect(dlg.m_cf.lpLogFont);就可为DC加载字体为联系创建字体,要对m_font资源做判断,如果存在就释放资源在创建。if(m_font.m_hObject)m_font.DeleteObject(); 查MSDN的类和它们的成员变量看事例。四十:改变对话框的背景色,控件字体色、背景色(Cbutton除外)。做WM_CTLCOLOR消息响应,并创建一个CBRUSH对象,return这个对象来改变对话框的背景色通过pWnd-GetDlgCtrlID()=ID做判断,/用pDC调用SetTextColor(RGB(255,0,0);SetBkMode(TRANSPARENT); SetBkColor(RGB(0,0,255);改变控件字体色、背景色,背景模式。泗一:改变CButton控件字体色、背景色在工程中加入一个以CButton为基类的新类。并重载虚函数DrawItem();在函数体中加入MSDN中CButton类的DrawItem()的示例代码。(改变背景色要自写代码)。在CButton控件中关联这个新类的变量,同时将控件属性Styles-Ower Draw选择上就可以改变字体色。改变背景色代码:有别人写的CSXBtn类和CButtonST类,以备:加载到工程中。用CSXBtn类雷同上,CButtonST类如下:加载CButtonST到工程中,在CButton控件中关联这个新类的变量,重载:OnInitDialog()调用下面的函数BOOL CSettingDlg:OnInitDialog()CDialog:OnInitDialog();m_btnST.SetActiveBgColor(RGB(0,0,255);m_btnST.SetActiveFgColor(RGB(255,0,0);泗二:在窗口中显示一幅位图。四步:1、准备一副位图,响应WM_ERASEBKGND消息。2、创建位图 CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP1); BITMAP bmp; bitmap.GetBitmap(&bmp);3、创建兼容DC CDC dcCompatible; dcCompatible.CreateCompatibleDC(pDC);4、将位图选到兼容DC中 dcCompatible.SelectObject(&bitmap);在GetClientRect(&rect)取的客户矩形。5、将兼容DC中的位图贴到当前DC中。pDC-BitBlt(rect.left,rect.top,rect.Width(), 或pDC-StretchBlt();rect.Height(),&dcCompatible,0,0,SRCCOPY);6、return TRUE;后也可在OnDraw()中又重绘。泗三:图形的保存和重绘一法:在工程中添加一普通类,添加多个成员变量以保存图形的各要素,并添加带这几个参数的构造函数来初始化对象在绘图的View中建立Cptr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论