本站首页    管理页面    写新日志    退出


 

 

 


最新日志

练车
今天是2011年07月02号
温馨
CInternetSession 类
CHttpFile实现Get/Post
在MFC中加一个控制台DOS界面
strtol 函数
outputParam
有关CTime和ColeDateTime
variant_t ,_bstr_t 与

 


 

最近的评论

回复:CHttpFile实现Get/Po
回复:好久没有来了
回复:参数自整定的模糊PID
回复:电子设计大赛自由命题可参考的题目
回复:数字万用表使用方法
回复:公交车上巨搞笑的一幕
回复:电子设计大赛自由命题可参考的题目
回复:电子设计大赛自由命题可参考的题目
回复:电子设计大赛自由命题可参考的题目
回复:暑假回来

 


 

连接




    

MFC小笔记
sccwqiang 发表于 2008/9/2 9:32:18

cdc derive cclientdc and cwindowdc;moveto 相当于起点,LINETO相当于终点;getdesktowindow()桌面窗口,可以得到其窗口对应圣像的的指针或者其窗口的句柄GetStockObject()得到画笔、画刷、字体、调色板的句柄,使用时必须用类型转换。slectobject()把画笔(CPEN Member),画刷(CBRUSH),字体(CFONT),调色板选到DC上.返回值为原来的OBJECT的指针.指定的填充区域,用FILLRECT(),因是指定的区域所以不别选到CD上. 第四讲 文本编程  主要用到的函数:CreateSolidCaret(width,height)-ShowCaret();                GetTextMetrics(TEXTMETRIC );=>注意此函数是与DC相关的,是CDC的成员函数.TEXTMETRIC 为结构体,其里是设备上下文中TEXT                 的相关字体信息.              OnDraw(CDC *pdc)函数是窗口进行重绘时调用的,用于显示而不变,始终看得见. textout();在设备上下文中进行输出TEXT;              CString 类无基类.成员函数:LoadString(ID);在String Table中;              CSize GetTextExtent(str):要用得是其返回值.是str字符串的WIDTH和HEIGHT.而GetTextMetrics(TEXTMETRIC)得到的是当前                 DC上下文中字体本身的信息.              一般BegainPath(),Endpath()要和SelectClipPath()三者一起用才有效....             (1)CDC::SetTextColor();设置TEXT颜色.Set\GetBKColor()设置和获取文本背景颜色.             (2)CFont类中封装了DC相关文字的信息,如CREATEPOINTFONT()->此函数是为了初始化CFont对象和相关字体资源的初始函数.                    可得到相关的字体.然后通过CDC::SlectObject()选到设备上下文中.第6讲 菜单Menu      最先得到菜单响应的顺序为 Cview->Cdoc->CMainFram->App->;         子菜单是包含菜单项.....别搞错!菜单项能用索引号和ID号来进行访问,而子菜单只能用索引号进行查找.          所用的函数:CMenu CWND::*GetMenu()得到菜单栏的地址,CMenu CMen *GetSubMenu()(表示getsubmenu是CMenu的成函数)得到子菜单的地址.           操作菜单项函数:CMenu ::CheckMenuItem() Cmenu ::SetDefaultMenu();(一般函数只用3个单词,后患无穷的被省掉)                          图形标记菜单:SetMenuItemBitmaps()此函数的Bitmap不能为局部变量\对象而且要下低色不能为白色;                          禁用菜单项:EnabledMenuItem()一般要求ITEM DISABLED时,要用把其变灰GRAYED还要注意需要高置一变量才行;      格式化函数:printf()屏幕上; sprintf() CString格式化到buffer中; Format()将数据按照一定的方式格式化到string 对像中;       (*****)设置整个菜单:SetMenu()和Cmenu LoadMenu();对象和实物相联时,bitmp和menu都一样,用loadbitmap\menu()不能为小变量.通过                   SetMenu(&menu)就可以了.Menu.Detach();      (1)Menu菜单响应有两个命令:ON_COMMOND和ON_UPDATE_COMMAND_UI前者用于点击时用,后者用于菜单项处理函数,所以可以直接用其响应和处理                菜单项.所以一般直接对相应的菜单项的操作对该菜单项进行ClassWizarred 的ON_UPDATE_COMMAND_UI即可.而不别像一面(*****)中那样操作了.        (2)客户区坐标和SCREEN坐标转化函数:ClentToScreen()可以是点(POINT)也可以是矩形(RECT);       (3)若用动态加载子菜单的话(CMainFram类的ONCreate中),此时MENU对象和其实例用CREATEPOPUPMENU()函数关联起来.I)如果通过GetMenu()后用AppendMenu()和InsertMenu(),DeletMenu()进行该Menu操作,就把MENU变成          子菜单了.II)直接没有用GETMENU()而MENU.A\I\D则得到该菜单的ITEM.如果不是动态则用得到地址后才行.       (4)手动添加标准消息和命令消息:WM_CREAT(无参数,因有默认的函数与之对应) ON_COMMAND(ID,和ID相关的函数);      (5)菜单栏属于CMAINFRAME的,在VIEW类中用GETMENU()得不到它所在地址.      (6)CString类的FIND函数可以查找CString中的字符或者说是字符串.反回一个整数标示其的基于0的索引值.LEFT(N)要从左面取多少个字符.            .Empty()清空.Format()格式化.GetLenth()获取长度[注意Cstring中结尾不是'0/'].      (7)CObject为对象的结合类,及是对象的数组.包括:CStringArray,CWordArray,CByteArray等格式的对象结合类.            成员函数.Add()添加.GetAt(索引)取出.GetSize()得到成员个数      (8)注意理解:对于菜单项为例,其的ID对就于一个整数值,是系统分配的,所以可以自己去先定义,而不是由系统自动分配.      (9)从前面可知道,view类要最先响应ON_COMMAND命令休息.所以要想在CMAINFRAM中去响应就得在CMAINFRAM中去截获该命令才行.不要CAMINFRAM去调用它的基类,OnCommand()函数.             (*)GetACtiveView()反回当前VIEW类的指针.      (*)注意出错是因为头文件有问题.第七讲 对话框       (1)CDialog类是对话框的基类.要用对话框的话,必须先要有一个对话框资源,然后ClassWizared该项资源为一对象.通过初始和DoModel()\EndModel()对MODEL DIALOG操作,             Create()\ShowWindow()\OnOK()\DestroyWindow();进行操作等进行操作.....再次注意用得是成员函数.....格式.成员函数....       (2)WS_VISIBLED | WS_CHILD对于CWND....对对话框的操作都应当用CDialog DERIVE子类进行操作,而不是对VIEW或CMAINFRAM进行操作.       (3)静态变量或者说静态对象只初始化一次,及程序再次执行到定义处时,不会再进行初始化了.也及那里不再执行.       (4)只要从CWND DERIVE的类,都有一个m_hWnd保存了C++窗口对象和资源相关的句柄.没有创建则m_hWnd为空,否则不空.       (5)对于文本默认得ID_为STATIC,所以一般不能对其进行操作,要改变其ID后才能进行相应操作,原因简单,因为用ID的资源分配系统来进行解释.       (6)CWnd *CWnd::GetDlgItem(DLG_ID)可以得到G该DLG_ID的对象指针.注意设置:poroty->styles->notify 使其能够接受通告能力.        (7)对于文本框的操作,行用(6)得到其对象指针,然后,用其成员函数Set\GetWindowText(CString\string). .... atoi可以所字符串的内容转换为数值形.itoa相反转换.       (8)的操作可以用CWnd::GetDlgItemTexe(ID,CHAR *)得到.或者用int n=CWnd::GetDlgItemInt(ID);把字符文本直接转换为INT形.       (9)直接对文本框进行关联变量即可.但要求CMAINFRAM重新调用DODATAEXCHGE()函数,来进行.Cwnd::UpdateData(True\False).TRUE表示关联的变量接受对话框文本值,FALSE表示用关联的变量设置对话框的值.       (10)资源关联为变量为一常用的变量,而关联为控件时表示为该资源类的对象.              (*)一般多了一个CWND DERIVE类后,对其的很多响应不能在CVIEW 类和CMAINFRAM类中进行响应.原因很简单处了框架窗口外,其它创建的窗口都必须有一个父窗口.就像Cview类中的对MOUTH的相应函数不能            用在其父类(CMainFram)中去相应一样. 所谓要用Buffer及是字符串.       (*)第一次接触SendMessage()进行消息处理,真对文本的WM_GETTEXT和WM_SETTEXT消息响应;       (1)SendDlgItemMessage()是用于对自身的子控件或子窗口发送消息的.相当于.GetDlgItem()[得到窗口子控件对象指针]->SendMessage();       (2)设置焦点,EM_SETSEL消息和用CEdit.SetFocu()函数,即可;          (@@@)Item中文子控件,GetDlgItem中文就是得到对话框的控件(子控件对象的指针);而不要理解为此函数是要得到当前对话框的对象指针.                同英文可知Set\GetDlgItemText()和Set\GetDlgItemInt()为何意.SendDlgItemMessage()等.        ($$$)一般控件(Activx)都应该是窗口.获取窗口大小用GetWindowRect();设置用SetWindowPos()此函数可以设置大小和Z-order.       (1)对话框中的WM_INITIALDIALOG当然它也有WM_CREAT,但是前者在后者产生之后.后者是Dialog产生但是其子窗口或者说子控件得还没有初始出来,             而WM_INITIALDIALOG是子控件等都产生了,其要显示之前发送的消息.       (2)重新设置窗口的过程函数可以利用,SetWindowLong()来进行.       (3)回调函数必须为全 函数,所以要用WIN32平台中的函数.而且该函数本身就提供了该窗口的句柄.注意它是一个窗口的函数,即如果要想得到父窗口的直接用::Getparent()即可.       (4)对于想得到当前窗口的前,后,子得窗口的句柄时可以直接调用 ::GetWindow()即可.

阅读全文(1714) | 回复(0) | 编辑 | 精华


发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

 

 

 


站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.039 second(s), page refreshed 144773958 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号