已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1属性页的添加:2List Control中标题栏(Column)的添加:3ToolBar和StatusBar中控件的添加:4通过Control创建的控件,对其属性的动态控制:5窗口的分割与停靠:6.怎样在程序开始的时候让它最大化?vc+做出来的exe文件在窗体的右上方是没有最大化和最小化按钮的,怎样实现这一功能?如何在显示窗口时,使最大化按钮变灰?7. 更改属性页标题8. 创建动态菜单9关于打印11. 修改主窗口风格12. 控制滚动条13. 属性页处理通知消息14.使工具条上的按钮点击一次为按下,再点击才弹起15. VC中基于 Windows 的精确定时16. 为对话框中的控件增加提示的简单方法17.删除文件夹18.消息映射19.给从CWnd派生的窗口添加滚动条20. SetWindowPos21. 介绍函数过程中一种任意键退出同时能处理消息的实现方法22. 如何隐藏工具栏23. 如何动态获取工具条指针并给工具条加标题?24. 在状态条中显示鼠标的设备坐标与逻辑坐标25. 如何用VC+ 动态修改应用程序菜单26. VC+中的3D按钮的编程27. 如何正确的得到ComBox的指针28. 如何让对话框中的CEdit控件类接收对话框的消息29.利用WM_CTLCOLOR消息实现编辑控制(Edit Control)的文本与背景色的改变30. 如何防止密码被非法获取?31. 如何在编辑控件中以追加的方式添入字符?32.属性页标题改名33. 怎样去掉属性页的Apply与Help按钮?34. 如何给树控件加入工具提示35. 如何在TreeList中加图标?36. 如何双击列表框项启动一个与文件关联的程序?37. 如何防止在listbox中添加很多数据出现不停的刷新?38. 如何得到CListBox所选择项的String?39. 用鼠标移动基于对话框的无标题栏程序的简单方法40. 如何改变框对话或窗体视窗的背景颜色41如何禁止对话框关闭按钮和浮动工具条上的系统菜单42如何拷贝一个工程的对话框资源到另一个工程中?42如何拷贝一个工程的对话框资源到另一个工程中?43如何实现点一下对话框外面的区域,自动隐藏对话框?44. 初始化应用程序的大小45. 如何得到视图指针?46. 如何使我的程序在启动时不创建一个新文档?47. 如何将标题栏上的右键菜单屏蔽掉?48如何全屏显示(没有标题,没有菜单,没有工具条)49如何设置有背景颜色的文本50串太长时往让其末尾显示一个省略号(在SDI或MDI的View中)51. 如何获得其他程序的图标,并显示在View中52 .RichEdit53. 如何使FormView中显示dialog时,不是凹的?54. 如何改变窗口标题?55.图标透明56. 将RADIO控件初始状态设置成为选中57.获得视图58如何得到屏幕的真实尺寸59. 修改标题栏高度60. 如何实现“气球式”工具提示。61. dlg 上建立View的方法:62. 窗口最大化、最小化及关闭的消息是什么?如何截获?63. 如何遍历整个目录树查找文件64. Richedit control的设置背景图片办法65. MFC程序中如何创建多级目录66. 解决外部符号错误:_main,_WinMain16,_beginthreadex67. 创建包含多个子目录的目录69. MDI中如何只屏蔽掉子框架的右上角的关闭按钮68. ReverseFind()70. 程序如何删除自己71. 隐藏标题栏和菜单栏72. InflateRect73. 怎么让无模式对话框显示在主窗口后面74. 隐藏窗口(子窗口没有焦点时)75.修改视图背景76. 如何实现点击对话框外的地方使对话框到主窗口的后面77. 想在程序一启动时就自动关闭窗口,不在任务栏里显示78.修改打印预览的ToolBar79. 如何实现SDI与MDI的转换?80. CDC中的竖排文本?81. 如何用键盘滚动分割的视口?82. 如何改变默认的光标形状?83. 如何选择CTreeCtrl中的节点文本进行编辑?84. CListCtrl中选择变化时如何获得通知?85. List控件中整栏选择?86. 如何限制mdi子框架最大化时的大小?87. 怎样实现3D效果?88. How do I update the text of a pane in a status bar?89. 动态修改对话框的大小90. 用DoModal()调用模态对话框,总是显示在正中,我重载了它,并添加了MoveWindow(),可是其m_hWnd是一串零,调用失败。请问有何方法可使调用的模态对话框显示于自定义位置?1属性页的添加:创建对话框的类,该类要从CpropertyPage继承;然后在要添加该对话框为属性页的类(头文件)里创建CpropertySheet类的一个对象 m_tabsheet和新创建的对话框类的对象m_skatch;最后,在.cpp文件里的OnInitDialog()之类的函数里实现如下代码:m_tabsheet.Create(this, WS_CHILD | WS_VISIBLE, 0);/使选项卡的按钮在下面if(m_tabsheet.m_hWnd)m_tabsheet.ShowWindow(SW_MAXIMIZE);/显示选项卡/加入标签,标签名由各个子对话框的标题栏决定m_tabsheet.AddPage(&m_skatch);/用Create来创建一个属性页m_tabsheet.Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT);RECT rect;m_tabsheet.GetWindowRect(&rect);int width = rect.right - rect.left;int height = rect.bottom - rect.top;/调整属性页的大小和位置m_tabsheet.SetWindowPos(NULL, 225, 225, width-82, height,SWP_NOACTIVATE);属性页的添加完成。如果要添加多个属性页,则只需要增加多个对象,如下:m_tabsheet.AddPage(&m_skatch1);m_tabsheet.AddPage(&m_skatch2);. . . . . .2List Control中标题栏(Column)的添加:创建一个List Control,其ID为IDC_LIST,在其Styles属性项下的View项里选择Report、Align项里选择Top、Sort项里选择None.然后在该List所在对话框的类(头文件)里创建ClistCtrl的一个对象m_list然后在.cpp文件的OnInitDialog()之类的函数里实现如下代码:CString strname3;strname0=Screen Name;strname1=Form ID;strname2=Category Path;for(int i=0;i3;i+)m_List.InsertColumn(i,strnamei,LVCFMT_LEFT,130);在这之前也要将List Control的ID与ClistCtrl的对象m_list在DoDataExchange(CDataExchange* pDX)函数里绑定,如下:DDX_Control(pDX, IDC_LIST, m_List);3ToolBar和StatusBar中控件的添加:方法.只能在ToolBar里创建控件:首先,在ToolBar中创建一个Button,其ID为ID_TOOL_COMBO(我们要将创建的控件放在该Button的位置上).其次,新创建一个类CMainToolBar,要从CToolBar继承(创建过程大概如下:选择工程/增加到工程/新的类;也可以选择工程的根,然后点击右键,选择新的类;或者CTL+W,选择增加类/新的类 - 然后在class type里选择Generic Class,在Name栏里输入新类的名字,Base class里输入CToolBar),创建成功后在该类里创建要增加的控件的对象,如:CComboBoxm_wndMyCombo;CStaticm_wndCategory, m_wndCategoryPath;CButtonm_wndOpenButton;Ceditm_wndEdit;然后在构造函数里初始化如:m_wndMyCombo.m_hWnd = NULL;m_wndCategory.m_hWnd = NULL;m_wndCategoryPath.m_hWnd = NULL;m_wndOpenButton.m_hWnd = NULL;m_wndEdit.m_hWnd = NULL;接着在CMainframe的头文件里创建CMainToolBar的一个对象m_wndToolBar,最后在.cpp文件的OnCreate函数的最后实现如下:int index = 0;CRect rect; / 可定义在头文件当中/ ComboBox/找到指定的工具项while(m_wndToolBar.GetItemID(index)!=ID_TOOL_COMBO)index+;/设置指定工具项的宽度并获取新的区域120是宽度m_wndToolBar.SetButtonInfo(index, ID_TOOL_COMBO, TBBS_SEPARATOR, 120);m_wndToolBar.GetItemRect(index, &rect);/设置位置rect.top+=1;rect.bottom += 200;/ 创建并显示控件if(!m_wndToolBar.m_wndMyCombo.Create(WS_CHILD|WS_VISIBLE| CBS_AUTOHSCROLL|CBS_DROPDOWNLIST | CBS_HASSTRINGS , rect, &m_wndToolBar, ID_TOOL_COMBO)TRACE0(Failed to create combo-boxn);return FALSE;m_wndToolBar.m_wndMyCombo.ShowWindow(SW_SHOW);/填充内容m_wndToolBar.m_wndMyCombo.AddString(25%);m_wndToolBar.m_wndMyCombo.AddString(50%);m_wndToolBar.m_wndMyCombo.AddString(75%);/选择默认项m_wndToolBar.m_wndMyCombo.SetCurSel(0);/获取到内容并MSGBOX显示出来CString strContent;m_wndToolBar.m_wndMyCombo.GetWindowText(strContent);index = 0;其他控件都类似创建(只需要注意一下各自的Create函数的参数即可)。方法.这种方法创建不太容易控制:直接在CMainframe的头文件中创建要增加的控件的对象,如CButton的对象 m_wndAboutButton,然后创建CToolBar或者CstatusBar的对象,如:CstatusBar的对象 _wndStatusBar;再增加几个函数如下:Protected:virtual void RecalcLayout(BOOL bNotify = TRUE);afx_msg void CMainFrame:OnViewStatusBar();接着在.cpp文件中将StatusBar的ID和OnViewStatusBar 函数绑定在一起,如下所示:BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) / AFX_MSG_MAP(CMainFrame) ON_COMMAND(ID_VIEW_STATUS_BAR, OnViewStatusBar) ON_WM_CREATE() / AFX_MSG_MAPEND_MESSAGE_MAP()然后Create函数的最后(返回值之前)实现如下代码:CRect rc;VERIFY(m_wndAboutButton.Create(_T(MyAbout), WS_VISIBLE,rc,this,ID_APP_ABOUT);/ TODO: Remove this if you dont want tool tips or a resizeable toolbarm_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);再在RecalcLayout函数里实现:CRect rc;if (m_wndStatusBar.m_hWnd)m_wndStatusBar.GetWindowRect(&rc);ScreenToClient(&rc);rc.right -= 50;m_wndStatusBar.SetWindowPos(NULL,rc.left,rc.top,rc.Width(),rc.Height(),SWP_NOZORDER);rc.left = rc.right;rc.right += 50;m_wndAboutButton.SetWindowPos(NULL,rc.left,rc.top,rc.Width(),rc.Height(),SWP_NOZORDER);最后在OnViewStatusBar()里实现:BOOL bShow = m_wndStatusBar.GetStyle() & WS_VISIBLE;m_wndAboutButton.SetWindowPos(NULL, 0, 0, 0, 0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|(bShow ? SWP_SHOWWINDOW : SWP_HIDEWINDOW);ToolBar中的创建与此相同,只需更改一下句柄即可。4通过Control创建的控件,对其属性的动态控制:在对话框类的头文件里创建所要改变属性的控件的对象,如要改变一个Button(其ID为IDC_MyButton)的属性,则需创建Cbutton的对象 m_button。然后在.cpp中的DoDataExchange函数里将Button的ID和创建的对象绑定在一起:/AFX_DATA_MAP(CPrintDlg)/ NOTE: the ClassWizard will add DDX and DDV calls hereDDX_Control(pDX, IDC_MyButton, m_button);/AFX_DATA_MAP然后可以在该函数的最后进行初始化:m_button.EnableWindow(FALSE);到这里已经实现了改变属性。如果要动态改变其属性,可如下实现(通过两个Button的点击改变起属性):/ RadioAll Button的点击响应函数void CPrintDlg:OnRadioAll()/ TODO: Add your control notification handler code herem_button.EnableWindow(TRUE);/ RadioSelect Button的点击响应函数void CPrintDlg:OnRadioSelect()/ TODO: Add your control notification handler code herem_button.EnableWindow(FALSE);也可以通过一个Check Button的点击来改变,在其点击响应函数里实现:m_button.EnableWindow(!m_button.IsWindowEnabled();其余控件属性的改变都如此。5窗口的分割与停靠:一、新建一个类CMySplitter,基类为CSplitterWnd二、重载该类的OnMouseMove函数:void CMySplitter:OnMouseMove(UINT nFlags, CPoint point)/ 限制切分条的运动范围。if(point.x600)CWnd:OnMouseMove(nFlags, point);elseCSplitterWnd:OnMouseMove(nFlags, point);三、 然后就可以跟一般的窗口分割那样去做了,if(point.x600)这里的范围可以随你去设置了 _,够简单吧。四、切分窗口在MaiFram.h建立切分条对象:protected:CMySplitter m_wndSplitter; /切分窗口对象/在MaiFram.cpp中实现窗口切分:BOOL CMainFrame:OnCreateClient(LPCREATESTRUCT /*lpcs*/,CCreateContext* pContext)/ 创建拆分器窗口if (!m_wndSplitter.CreateStatic(this, 1, 2)return FALSE;if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView),CSize(228,100), pContext) |!m_wndSplitter.CreateView(0,1, RUNTIME_CLASS(CDataEditView), CSize(100, 100), pContext)m_wndSplitter.DestroyWindow();return FALSE;return TRUE;6.怎样在程序开始的时候让它最大化?vc+做出来的exe文件在窗体的右上方是没有最大化和最小化按钮的,怎样实现这一功能?如何在显示窗口时,使最大化按钮变灰?在App类里的CApp:InitInstance()中把m_pMainWnd-ShowWindow(SW_SHOW)改成m_pMainWnd-ShowWindow(SW_MAXIMIZE);在CreateWidnow时用WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX 风格. 第一种方法:BOOL CMainFrame:PreCreateWindow(CREATESTRUCT& cs)if( !CFrameWnd:PreCreateWindow(cs) )return FALSE;/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT cs/ disable the maxmini boxcs.style &= WS_MAXIMIZEBOX;return TRUE;第二种方法:CMenu *pMenu=AfxGetApp()-m_pMainWnd-GetSystemMenu(FALSE);int x=pMenu-GetMenuItemCount( );UINT pID=pMenu-GetMenuItemID(x-1);pMenu-EnableMenuItem(pID, MF_DISABLED);第三种方法:ModifyStyle(WS_MAXIMIZEBOX, 0);这个函数也可以是最大化按钮失效!并且可以在程序中动态的改变窗口的风格7. 更改属性页标题void CProSheet:SetPageTitle(int nPage, int nImage, CString strTitle)TC_ITEM item;/item.mask = TCIF_TEXT|TCIF_IMAGE; /设置图标+文字item.mask = TCIF_IMAGE; /只设置图标item.iImage = nImage;/ item.pszText = strTitle.GetBuffer(0); /设置文字GetTabControl ()-SetItem (nPage, &item);/要设置文字时就将上面2行有注释符的代码前的注释符去掉8. 创建动态菜单void CMainFrame:OnSelectState(NMTOOLBAR* pnmtb, LRESULT *plr)CMenu menu;if(!menu.CreateMenu()return;menu.AppendMenu(MF_STRING,0,开始);menu.AppendMenu(MF_STRING,0,结束);CRect rc;m_wndToolBar.SendMessage(TB_GETRECT, pnmtb-iItem, (LPARAM)&rc);m_wndToolBar.ClientToScreen(&rc);menu.TrackMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,rc.left, rc.bottom, this, &rc);/menu.DestroyMenu();menu.detach();9关于打印1.要打印哪个视就(CMainFrame*)AfxGetMainWnd()-m_wndSplitter.SetActivePane(.)/要打印的那个视对应的Pane2.有一个单文档工程,文档窗口被切分:左视图由CTreeView 的派生类管理,右视图由CListView 的派生类CMyListView(其为风格为LVS_REPORT)管理,我想为右视图添加打印和打印预览,我在MyListView.cpp中添加了ON_COMMAND(ID_FILE_PRINT,CListView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW,CListView:OnFilePrintPreview)还有BOOL CMyListView:OnPreparePrinting(CPrintInfo* pInfo)/ TODO: call DoPreparePrinting to invoke the Print dialog box/ return CListView:OnPreparePrinting(pInfo);pInfo-SetMaxPage(2);BOOL bret=DoPreparePrinting(pInfo);pInfo-m_nNumPreviewPages=2;return bret;3. 下面是从MSDN中摘出来的一段,是用来改变消息路由的。用了这段代码之后,CView中的消息(菜单,控件,子窗口)将先被CMyShape类来处理。不知道你要的是不是这样的效果。/ This example illustrates extending the frameworks standard command/ route from the view to objects managed by the view. This example/ is from an object-oriented drawing application, similar to the/ DRAWCLI sample application, which draws and edits shapes.BOOL CMyView:OnCmdMsg(UINT nID, int nCode, void* pExtra,AFX_CMDHANDLERINFO* pHandlerInfo)/ Extend the frameworks command route from the view to/ the application-specific CMyShape that is currently selected/ in the view. m_pActiveShape is NULL if no shape object/ is currently selected in the view.if (m_pActiveShape != NULL)& m_pActiveShape-OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)return TRUE;/ If the object(s) in the extended command route dont handle/ the command, then let the base class OnCmdMsg handle it.return CView:OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);/ The command handler for ID_SHAPE_COLOR (menu command to change/ the color of the currently selected shape) was added to/ the message map of CMyShape (note, not CMyView) using ClassWizard./ The menu item will be automatically enabled or disabled, depending/ on whether a CMyShape is currently selected in the view, that is,/ depending on whether CMyView:m_pActiveView is NULL. It is not/ necessary to implement an ON_UPDATE_COMMAND_UI handler to enable/ or disable the menu item.BEGIN_MESSAGE_MAP(CMyShape, CCmdTarget)/AFX_MSG_MAP(CMyShape)ON_COMMAND(ID_SHAPE_COLOR, OnShapeColor)/AFX_MSG_MAPEND_MESSAGE_MAP()如果你只是想调用OnFilePrint( )函数,可以试一试下面的代码,就和调用其它类中的函数一样。CMDIFrameWnd *pFrame =(CMDIFrameWnd*)AfxGetApp()-m_pMainWnd;/ Get the active MDI child window.CMDIChildWnd *pChild =(CMDIChildWnd *) pFrame-GetActiveFrame();/ or CMDIChildWnd *pChild = pFrame-MDIGetActive();/ Get the active view attached to the active MDI child/ window.CMyView *pView = (CMyView *) pChild-GetActiveView();pView-OnFilePrint( );4.void CMyReportView:OnFileOpen()char Filter = Crystal Report files(*.rpt)|*.rpt|All files(*.*)|*.*|;CRect rect;CFileDialog OpenDlg(TRUE,0,0,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,(LPCTSTR)Filter,NULL);if(OpenDlg.DoModal()!=IDOK) /显示文件对话框return;CString m_fName=OpenDlg.GetPathName(); /取得文件名if(m_CrystalReport)m_CrystalReport.DestroyWindow();GetClientRect(rect);/创建控件/if (!m_CrystalReport.Create(AfxRegisterWndClass(0, AfxGetApp()-LoadStandardCursor(IDC_ARROW),WS_CHILD|WS_VISIBLE,rect,this,IDC_CRYSTALREPORT1)AfxMessageBox(控件创建失败!);return ;m_CrystalReport.SetWindowParentHandle(long)(this-m_hWnd);/设置父窗口m_CrystalReport.SetWindowBorderStyle(0); /设置为没有边框m_CrystalReport.SetWindowLeft(0); /左空间m_CrystalReport.SetWindowTop(0); /顶部空间m_CrystalReport.SetWindowControls(FALSE); /不显示工具条m_CrystalReport.SetReportFileName(m_fName); /设置报表文件m_CrystalReport.SetWindowWidth(rect.Width(); /设置窗口宽度m_CrystalReport.SetWindowHeight(rect.Height(); /设置窗口高度m_CrystalReport.SetFormulas(0, Company=VC知识库); /将报表中的Company变量的值设置为VC知识库m_CrystalReport.SetDestination(0); /设置输出对象是屏幕m_CrystalReport.PrintReport(); /显示报表void CMyReportView:OnFilePrint()if(m_CrystalReport & m_CrystalReport.GetReportFileName() != )m_CrystalReport.SetDestination(1); /设置输出对象是打印机m_CrystalReport.PrintReport(); /打印10. Scroll创建一个基于CScrollview的SDI Project(在第6步中选CScrollview)若你已创建了,这步可以省略。然后:改为如void CTestView:OnInitialUpdate()CScrollView:OnInitialUpdate();CSize sizeTotal;/ TODO: calculate the total size of this viewsizeTotal.cx = 1024; /改这两个sizeTotal.cy = 768; /SetScrollSizes(MM_TEXT, sizeTotal);11. 修改主窗口风格AppWizard 生成的应用程序框架的主窗口具有缺省的窗口风格,比如在窗口标题条中自动添加文档名、窗口是叠加型的、可改变窗口大小等。要修改窗口的缺省风格,需要重载 CWnd:PreCreateWindow(CREATESTRUCT& cs)函数,并在其中修改CREATESTRUCT型参数cs。CWnd:PreCreateWindow 函数先于窗口创建函数执行。如果该函数被重载,则窗口创建函数将使用CWnd:PreCreateWindow 函数返回的CREATESTRUCT cs参数所定义的窗口风格来创建窗口;否则使用预定义的窗口风格。CREATESTRUCT结构定义了创建函数创建窗口所用的初始参数,其定义如下:typedef struct tagCREATESTRUCT LPVOID lpCreateParams; / 创建窗口的基本参数HANDLE hInstance; / 拥有将创建的窗口的模块实例句柄HMENU hMenu; / 新窗口的菜单句柄HWND hwndParent; / 新窗口的父窗口句柄int cy; / 新窗口的高度int cx; / 新窗口的宽度int y; / 新窗口的左上角Y坐标int x; / 新窗口的左上角X坐标LONG style; / 新窗口的风格LPCSTR lpszName; / 新窗口的名称LPCSTR lpszClass; / 新窗口的窗口类名DWORD dwExStyle; / 新窗口的扩展参数 CREATESTRUCT;CREATESTRUCT 结构的style域定义了窗口的风格。比如,缺省的MDI主窗口的风格中就包括FWS_ADDTOTITLE(在标题条中显示当前的工作文档名)、 FWS_PREFIXTITLE(把文档名放在程序标题的前面)、WS_THICKFRAME(窗口具有可缩放的边框)等风格。由于多种风格参数由逻辑或(“|”)组合在一起的,因此添加某种风格,就只需用“|”把对应的参数加到CREATESTRUCT结构的style域中;删除已有的风格,则需用 “&”连接CREATESTRUCT结构的style域与该风格的逻辑非值。CREATESTRUCT结构的x、y、cx、cy域分别定义了窗口的初始位置和大小,因此,在CWnd:PreCreateWindow 函数中给它们赋值,将能定义窗口的初始显示位置和大小。下例中的代码将主框窗口的大小将固定为1/4屏幕,标题条中仅显示窗口名,不显示文档名。BOOL CMainFrame:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT cs/ 修改主窗风格cs.style &= FWS_ADDTOTITLE; /去除标题条中的文档名cs.style &= WS_THICKFRAME; /去除可改变大小的边框cs.style |= WS_DLGFRAME; /增加不能改变大小的边框/ 确定主窗的大小和初始位置int cxScreen = :GetSystemMetrics(SM_CXSCREEN);/获得屏幕宽int cyScreen = :GetSystemMetrics(SM_CYSCREEN); /获得屏幕高cs.x = 0; / 主窗位于左上角cs.y = 0;cs.cx = cxScreen/2; / 主窗宽为1/2屏幕宽cs.cy = cxScreen/2; / 主窗高为1/2屏幕高return CMDIFrameWnd:PreCreateWindow(cs);12. 控制滚动条BOOL CDiagramShowView:PreTranslateMessage(MSG* pMsg)CFileTreeDoc* pDoc = (CFileTreeDoc*)GetDocument();CPoint point = GetScrollPosition();if(pMsg-message = WM_KEYDOWN)switch(pMsg-wParam)case VK_LEFT:if( point.x 10)EndPoint.x = EndPoint.x - 10;EndPoint.y = EndPoint.y;elseEndPoint.x = 0;EndPoint.y = EndPoint.y;ScrollToPosition(EndPoint);InvalidateRect(NULL,TRUE);break;case VK_RIGHT:if( point.x intDiagramColumnCount * pDoc-intColumnWidth - 10 )EndPoint.x = EndPoint.x + 10;EndPoint.y = EndPoint.y;elseEndPoint.y = pDoc-intDiagramColumnCount * pDoc-intColumnWidth;EndPoint.x = EndPoint.x;ScrollToPosition(EndPoint);InvalidateRect(NULL,TRUE);break;case VK_UP:if( point.y 10)EndPoint.y = EndPoint.y - 10;EndPoint.x = EndPoint.x;elseEndPoint.y = 0;EndPoint.x = EndPoint.x;ScrollToPosition(EndPoint);InvalidateRect(NULL,TRUE);break;case VK_DOWN:if( point.y intDiagramRowCount * pDoc-intRowHeight - 10 )EndPoint.y = EndPoint.y + 10;EndPoint.x = EndPoint.x;elseEndPoint.y = pDoc-intDiagramRowCount * pDoc-intRowHeight;EndPoint.x = EndPoint.x;ScrollToPosition(EndPoint);InvalidateRect(NULL,TRUE);break;default:break;return FALSE;/ 通过正负号判断是向上还是向下滚动if(zDelta=120)向上滚动if(zDelta=-120)向下滚动BOOL CDiagramShowView:OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)CFileTreeDoc* pDoc = (CFileTreeDoc*)GetDocument();CPoint point = GetScrollPosition();if(zDelta=120)if( point.y = 20 )EndPoint.x = point.x;EndPoint.y = point.y;EndPoint.x = EndPoint.x;EndPoint.y = EndPoint.y - 20;elseEndPoint.x = EndPoint.x;EndPoint.y = 0;if(zDelta=-120)if( point.y intDiagramRowCount * pDoc-intRowHeight - 20 )EndPoint
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 床品智能化睡眠创新创业项目商业计划书
- 搪瓷洗手液瓶与香皂盒创新创业项目商业计划书
- 坚果特色风味酱创新创业项目商业计划书
- 建筑五金产品智能化安装服务创新创业项目商业计划书
- 婚纱摄影策划活动方案
- 迪士尼培训活动方案策划
- 流量招募活动策划方案
- 明洞套筒施工方案
- 潮汕过年活动策划方案
- 藕粉美食活动策划方案
- GB/T 38834.2-2023机器人服务机器人性能规范及其试验方法第2部分:导航
- 水库移民补助申请书
- 城市轨道交通基础设施与设备PPT完整全套教学课件
- 纸制品制品加工安全风险辨识分级管控指南
- 花鸟画知到章节答案智慧树2023年海南师范大学
- 第一章 社会学的创立和发展
- 常见肿瘤急症诊断与处理
- 人音一年级音乐上册动物说话
- 2022广东惠州市博罗县自然资源局补充公开招聘土地监察巡查协管员18人模拟检测试卷【共500题含答案解析】
- GB∕T 17466.1-2019 家用和类似用途固定式电气装置的电器附件安装盒和外壳 第1部分:通用要求
- 打印机报价单模板(1)
评论
0/150
提交评论