`
rae855jb
  • 浏览: 24860 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

11July2010-31July2010

 
阅读更多

11July2010-31July2010
2010年08月21日
  11 日: 编写Win32应用程序的步骤:
  1.编写WinMain函数,可以再MSDN上查找并复制
  2.设计串口类(WNDCLASS)。
  3.注册窗口类。
  4.创建窗口。
  5.显示并更新窗口。
  6.编写消息循环。
  7编写窗口过程函数。(可用MSDN查看WNDCLASS的lpfnWndProc成员变量的解释中可查到)
  12 一: 
  白天停电,基本没看啥。
  13 二:
  1.在某函数的cpp文件中,(在函数以外)定义全局变量x,则此变量x在所有的cpp文件(包含主函数)的cpp文件中都是可见的(即其他函数中不能再定义同名的全局变量,否则链接出错;但可以定义局部的同名变量);但是若想在其他cpp函数文件中使用修改该变量x,需要使用“extern int x” 声明一下该变量(若想使用全局变量,可以在相应的.h文件中加入声明“extern int x”)。
  2.可以使用static 在某函数的cpp文件中,(在函数以外)定义本文件内可见全局变量x,则此变量x仅在本文件中可见。外部cpp函数文件即使使用extern声明,也无法访问改变量,因为static将变量作用域限制在了定义的文件中。
  3.CMainFram::OnCreate()函数,用于响应窗口创建的消息(WM_CREATE)响应函数。
  4.声明、定义、初始化的区别
  声明:声明由于向编译器表明变量的类型和名字(函数、对象也基本如此)
  定义:定义用于为变量分配内存空间(对象也类似,函数的定义指有具体函数的功能说明,如{……};而“void func();”是函数的声明;变量有时既是定义也是声明如: int i;)
  初始化:变量的初始化是指对变量赋值(对象的初始化主要有对应类的构造函数完成;)
  14 三:
  1.在BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP之间的映射宏,将消息响应和函数联系起来了。(??vs2005中是这样吗?)
  2.MFC中采用消息映射的方式,MFC后台维护了对象句柄(c++类对象的指针映射),将指针传给基类调用windowProc()虚函数,再调用->实际的消息路由和映射处理都在CWnd::OnWndMsg(),该函数查看声明中有无消息函数和两个MAP之间有无宏定义消息响应函数。
  3.WM_BUTTONDOWN ,WM_BUTTONUP,分别对应鼠标 按下和弹起的windows消息
  4.作图首先获取DC句柄,HDC dc,MoveToEx(),先要GetDC()做完图后要ReleaseDc()
  5.常用CClientDC类,因为它创建的对象不需要GetDc()和ReleaseDC(),在其类内部已经实现。
  6.CWindowDC,可访问整个客户区,也不错。GetParent()获取父窗口指针
  15 四:
  1.CPen,是用来改变画笔的颜色。
  RGB,宏,三原色,根据配比不同可组成不同颜色
  CDC::SelectObject()把一个画笔选到设备描述表中,注意选择画笔画完图后,在把画笔该回来(已经保存了先前的画笔)
  2.CBrush::画刷,通常用画刷来填充背景颜色,CBrush::FillRect()函数,使用指定画刷填充举行区域
  3.CBitmap::LoadBitmap(),CDC::SetROP2(),
  4.可以使用类名::静态(static)成员函数来调用,静态成员函数不可以对非静态成员变量赋值;注意内存模型,静态是在对象初始化之前就已经存在内存中了。所以,静态成员函数不可调用非静态成员函数(无内存代码),而非静态成员函数可以调用静态成员函数。静态成员变量使用前要初始化。 注意静态函数、变量的内存模型!!!!!!
  5.WM_MOUSEMOVE --鼠标移动消息
  6.文本编程:
  CWdn::CreateSolidCaret(),创建文字处理的插入符。
  CDC::GetTextmetrics(),获取字体信息
  CClientDC dc,
  CWnd::CreateCaret(),创建图形插入符。
  CxxxView类提供了OnDraw()函数,可用于输出文字。
  CWnd::SetCaretPos(),设定插入符的位置。
  TextOut()文本输出函数。
  DrawText()也是文本输出函数,但是可以输出一部分矩形区域内的文字,可用于类似卡拉OK的文字变色的实现。
  CWnd::SetTimer()设定定时器。
  7.注意是否要定义类的成员函数内部的局部对象,因为局部变量(对象)往往是资源的标识符,当其函数调用后,对象要跟着销毁,资源也跟着销毁。解决方法是用整个类的成员变量(或对象)来代替。
  8.CString类对字符串操作很常用,注意其用法。
  GetLength();取出字符串的个数
  left();获取字符串中左边几个字符
  9.路径层(path bracket),打开一个路径层函数CDC::BeginPath(),关闭路径层CDC::EndPath()。CDC::GetTextExtent()返回一个字符串的宽度和高度。使用SelectClipPath()函数使当前区域与路径层互操作,此处可以使一些特殊的东西添加到路径层中。
  10.CSize,CPint,CRect,CFont类也较为常用
  16 五:
  1.消息的分类:
  标准消息:
  除WM_COMMAND之外,所有以WM_开头的消息。从CWnd派生的类都可以接收到这类消息。
  命令消息:
  来自菜单、加速键或工具栏按钮的消息。这类消息都已WM_COMMAND呈现。在MFC中,通过国菜单项的标识(ID)来区分不同的命令消息;在SDK中通过消息的wParam参数识别。从CCmdTarget派生的类,都可以接收到这类消息。
  通告消息:
  由控件产生的消息,例如,按钮的单击,列表框的选择等均产生此类消息,为的是向其父窗口(通常是对话框)通知时间的发生。这类消息也是以WM_COMMAND形式呈现。 从CCmdTarget派生的类,都可以接收到这类消息。
  2.CWnd::GetMenu(),返回一个指向CMenu的指针,返回指向当前框架类的指针。
  一些子函数GetMenu();GetSubMenu();SetDefaultItem();SetMenuIte mBitmaps();Detach();TrackPopupMenu();ClientToScreen ();AppendMenu();CreatPopupMenu();InsertMenu();DrawM enuBar();Invalidate();Find();OnCommand();
  LOWORD();GetActiveView();GetAt();
  3.索引法进行编程时,不要忽略子菜单下面中的分隔横线也占用一个资源。 4.m_hMenu保存了当前资源菜单的句柄。
  5.Resource.h定义了一些资源的ID,在这里可以自己添加一个ID号。然后手动添加消息的原型(在类的头文件之中在protected: afx_msg void Onxxx(),在ELCLARE_MESSAGE_MAP()上面),接下来写消息映射(在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间,加入ON_COMMAND(IDM_HELLO,OnHello)注意这之后无标点符号),最后在相应类的cpp文件中加入子函数的定义,(void 类名::子函数名)
  6.解决多个控件连续循环的赋值的方法:可以把最开始的控件设为IDM_PHONE1,在Resources.h文件中分别为其相应的宏IDM_PHONE2……定义成连续的值,则循环内部为IDM_PHONE1+i(i在不断自增,从而访问连续的控件)
  19 一:
  1.对话框类CDialog,Domdal()内部有显示函数;而非模态对话框Creat(),还需调用ShowWindow(),并且要使用成员变量,不能使用局部变量。
  2.注意按钮等不能重复创建.可以使用静态变量,当一个静态变量被第一次运行时,会对其分配内存;若第二次运行到此处,则该变量不会重新复制,因为已经分配内存空间了。
  3.常用函数GetDlgItem(),此函数经常用到,获取子控件的一个指针。GetWindowText(),SetWindowText();格式转换函数atoi(),itoa(),atof()。GetDlgItemText(),SetDlgItemText()。GetDlgItemInt(),
  4.静态文本框,要改一下ID,并且Notify要是TRUE,使其能接收通告消息.
  20 二:
  1.常用函数Updatedata(),缺省为真--数据正在被获取,为假--对话框正在被初始化。GetWindowRect().SetWindowPos()设置Z次序。
  2.定义控件变量,CEdit类型(也是从CWnd派生出来的),利用其成员函数GetwindowsText()获取控件的内容,SetWindowText()设定控件的内容。使用控件变量,调用SendMessage(),发送WM_GETTEXT、WM_SETTEXT消息给系统。或者使用GetDlgItemMessage()函数来设置控件。
  3.获取编辑框中的复选内容, EM_GETSEL,EM_SETSEL,还是使用SendDlgItemMessage()函数。CWnd::SetFocus()函数来设置焦点。若将开始位置设为0,结束位置设为-1,则将所有内容都选择上。
  22 四:
  1.修改光标到下一控件所用的函数:SetWinodowLong();WM_NIITDIALOG消息是当对话框及所有控件创建完成,在即将显示之前发送的消息。WNDCLASS类中的第二个参数就有如果变现windows消息处理函数,函数名可以改变,该函数为全局函数,使用SDK函数。SetFocus(),GetNextWindow(),GetWindows();编辑框中 Multiline选项是指该编辑框是否接收多行的信息,如果要接收多行或回车,该项应该改为(TRUE)。控件中的Tab stop 是按下Tab键的顺序。GetNextDlgTabItem();
  2.传递焦点的实现方法二:(更加简便一些)使用默认的函数OnOK(),该函数是默认对OK(回车)键相应的函数,GetFocus()用来获取当前焦点窗口指针。GetNextDlgTabItem()。
  3.要想恢复OK按钮,ID设为“IDOK”。
  23 五:
  数学分析:
  极限的四则运算(如:和的极限等于极限的和)仅对有限个项有效,对无限项是无效的。
  24 六:
  1.在工作目录下的*.clw文件存储了类向导中的一些信息,修改它可以使类向导认识更多自己添加的类(再删除之前已经添加了一些自己创建的新的类)。 首先,将其删除掉。然后,打开工程,提示未找到*.clw文件,点确定,再将原来的文件名填入(用于VC6)。
  2.函数 SetWizardButton();AddPage();OnSetActive()
  26 一:
  1.修改单选按钮,将group选项置为TRUE,这样就可以再类向导中看到该资源ID了。当选择了group,第一个单选按钮和接下来的单选按钮,就变成同一个组之中,直到遇到下一个选中组的按钮。在同一个组中,几个控件关联到同一个变量之中,第一个单选按钮选中后,控件变量值为0,、选择第二个值为1.……
  2.在类资源中,类名右单击,可以增加虚函数OnWizardNext(),
  3.CListBox类――列表框,AddString();
  4.对4个复选框关联4个类型的成员变量。
  5.组合框是由编辑框和列表框组合而成,对应的类为CComboBox,利用其成员函数AddString();捕获WM_ONINIT消息函数,捕获窗口初始化的消息。注意组合框本身具有自动排序的功能,Style->Sort选项中,改为FALSE。SetCurSel()可以选择某个下拉菜单。GetCurSel()函数可以获得用户的选项。GetLBText()可以获得用户选择的字符串的成员函数。
  6.可以利用memset(),快速设置数组的内容。如设置bool 型数组m_bLike[4],初始化假时,memset(m_bLike,0,4);
  7.调用Invalidate()函数,引起窗口无效,是窗口重绘。从而在Ondraw()函数中完成这些信息的输出。
  8.CFont类中CreatePointFont()可以设置字体,SelectObject()选择一种字体,返回值是旧字体。
  27 二:
  1.在CMainFrame类中的preCreateWindow()函数,可以修改cs,cs结构中的参数就是CtreateWindowEX()函数的参数相同,顺序相反。
  2.msdn 中输入 window styles,插到单文档情况SDI。
  3.改变窗口的图标、光标、背景,可以编写自己的窗口类。在CMainFrame中自己编写一个窗口类,WNDCLASS wndcls;wndcls.hInstance=::AfxGetInstanceHandle();m sdn中给出了AfxGetInstanceHandle()函数获取当前应用程序句柄;wndcls.lpfnWndProc=::DefWindowProc();wndcls.lpszC lass.Name="sunxin.org";调用RegisterClass(&wndcls)函数注册该类;最后更改cs.lpszClass="sunxin.org";因为View类覆盖在最上面,因此,在View类的PreCreateWindow()函数中,也应该改一下注册类的名称,cs.lpszClass="sunxin.org";在框架类之中才能修改窗口的标题栏,在View类中可以修改光标和背景。
  4.msdn中提供了全局函数AfxRegisterWndClass()函数来替代自己重写编写一个新类。如:cs.lpszClass=AfxRegisterWndClass(……),GetStockObject();
  5.在创建窗口之后,可以调用全局函数SetClassLong(),重新设置窗口的图标等。
  6.宏MAKEINTRESOURCE可以将图标等资源ID转化为int整数。
  7.CWinApp类,有几个成员可以使用作为句柄。也可以使AfxGetApp()函数获取句柄等。
  8.SetTimer()函数用来设定一个定时器。增加windows消息处理函数,WM_TIMER消息的处理。
  9.CToolBar类标识了一些工具栏所用的类。
  28 三:
  1.RecalcLayout()函数可以调整工具栏和控制条的隐藏和显示。DockControlBar()将工具栏进行停靠。
  2.第二种显示工具栏的方法,ShowControlBar()函数。增加复选标记,选择Update COMMAND UI 类型的函数,调用SetCheck()函数。
  3.类CTime中成员函数GetCurrentTime()函数可以表示系统当前时间。CStatusBar类是状态栏的类,其成员函数SetPaneText()可以设定下方状态的字体。CommandToIndex()可以将资源ID转化为一个索引值(用于SetPanetext()函数)。改变窗格宽度SetPaneInfo()函数。可以用一个定时器,定时器每隔1秒发送一个WM_TIMER消息,在消息响应函数中更新时间。
  4.类CProgressCtrl。GetItemRect()取出矩形区域。StepIt()按照设置的步长前进
  5.避免用户自定义消息和系统消息冲突,WM_USER值以下是系统消息,值以上用户可以自定义消息。宏ON_MESSAGE可以将函数与消息联系在一起。
  6.注意PostMessage(),SendMessage()的区别,前者投递完消息就返回,或者会等消息响应函数执行完毕再返回。MoveWindow()函数用来移动窗口。GetDescendantWindow()获取子孙ID的指针。
  7.添加启动画面,添加visual c++组建,有一个splash screen,插入到工程中,选择类名和资源ID。CSplashWnd类,中有一些函数类设定显示时间和相关信息.
  关于工作中的:
  在项目属性使用多字节后,界面的风格和windows 98等按钮的风格十分接近,为使界面更加好看,可以使用XPStyle.manifest(网盘,U盘里均有),将其加入到“解决方案资源管理器”中的“资源文件”目录下,即可变成xp的界面风格。
  29 四:
  1.SetPixel()函数用来设定点。类CPoint是对点数据保存的类。CPen类画笔。RGB()构造颜色。类CClientDC,SelectObject()选择画笔。类CColorDialog可以很方便的创建一个颜色对话框。 CFontDialog类可以设置字体对话框。
  2.Invalidate()函数使窗口无效,发送WM_PAINT消息,使窗口重绘,进入的相应类的OnDraw()函数中执行。
  3.往往有时候第二次调用某程序(或对话框)出错的原因是:在类中某成员变量已经和某资源关联上了。当第二次调用该成员进行创建某资源时,该成员将关联两个资源,这是系统所不允许的,因此产生了运行错误。这是可采用释放该变量对应的资源,用该变量重新创建对应的资源。释放某变量对应的资源可以采用CGDIObject::DeleteObject()函数。
  4.Edit对话框里面的内容改变时会发送一个EN_CHANGE通告消息。
  5.改变对话框的背景色和文字的颜色。OnCtlColor()函数可改变控件背景的颜色,它用来响应WM_CTLCOLOR消息。GetDlgCtrlID()函数,返回子窗口的ID值。SetBKMode()设置文字背景色,SetTextColor()设置文字颜色。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics