MFC中鼠标移动到控件上显示提示信息

合集下载

(MFC)无标题栏窗口移动方法

(MFC)无标题栏窗口移动方法

移动标准窗口是通过用鼠标单击窗口标题条来实现的,但对于没有标题条的窗口,就需要用鼠标单击窗口标题条以外区域来移动窗口。

有两种方法可以达到这一目标。

方法一:当窗口确定鼠标位置时,Windows向窗口发送WM_NCHITTEST消息,可以处理该消息,使得只要鼠标在窗口内,Windows便认为鼠标在标题条上。

这需要重载CWnd类处理WM_NCHITTEST消息的OnNcHitTest函数,在函数中调用父类的该函数,如果返回HTCLIENT,说明鼠标在窗口客户区内,使重载函数返回HTCAPTION,使Windows误认为鼠标处于标题条上。

下例是使用该方法的实际代码:UINT CEllipseWndDlg::OnNcHitTest(CPoint point){// 取得鼠标所在的窗口区域UINT nHitTest = CDialog::OnNcHitTest(point);// 如果鼠标在窗口客户区,则返回标题条代号给Windows// 使Windows按鼠标在标题条上类进行处理,即可单击移动窗口return (nHitTest==HTCLIENT) ? HTCAPTION : nHitTest;}方法二:当用户在窗口客户区按下鼠标左键时,使Windows认为鼠标是在标题条上,即在处理WM_LBUTTONDOWN消息的处理函数OnLButtonDown中发送一个wParam参数为HTCAPTION,lParam为当前坐标的WM_NCLBUTTONDOWN消息。

下面是使用该方法的实际代码:void CEllipseWndDlg::OnLButtonDown(UINT nFlags, CPoint point){// 调用父类处理函数完成基本操作CDialog::OnLButtonDown(nFlags, point);// 发送WM_NCLBUTTONDOWN消息// 使Windows认为鼠标在标题条上PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x, point.y)); //或SendMessage(WM_SYSCOMMAND,0xF012,0); //0xF012 = SC_MOVE | HTCAPTION}首先,看看在正常情况下系统是怎样来移动程序窗口的。

MFC中添加状态栏_显示时间

MFC中添加状态栏_显示时间

MFC中添加状态栏1.首先在string table 里添加两个字串,ID分别为IDS_INDICATOR_MESSAGE and IDS_INDI2.在你的 dlg.h 类里面加个 CStatusBar m_bar;3.在dlg.cpp 开头加上static UINT indicators[] ={IDS_INDICATOR_MESSAGE,IDS_INDICATOR_TIME};4.OnInitDialog 里面加上m_bar.Create(this); //We create the status barm_bar.SetIndicators(indicators,2); //Set the number of panesCRect rect;GetClientRect(&rect);//Size the two panesm_bar.SetPaneInfo(0,IDS_INDICATOR_MESSAGE,SBPS_NORMAL,rect.Width()-100);m_bar.SetPaneInfo(1,IDS_INDICATOR_TIME,SBPS_STRETCH ,0);//This is where we actually draw it on the screenRepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,ID_INDICATOR_TIME);5.时间显示OnInitDialog 里面加 SetTimer(1,1000,NULL);为你的dlg类添加WM_TIMER的响应函数,在其中添加代码:CTime t1;t1=CTime::GetCurrentTime();m_bar.SetPaneText(1,t1.Format("%H:%M:%S"));CDialog::OnTimer(nIDEvent);这样添加的程序刚开始运行时在时间一栏中显示的是初始设置的字符,为了使程序在刚开始运m_bar.SetPaneInfo(1,IDS_INDICATOR_TIME,SBPS_STRETCH ,0);后添加如下代码:CTime t1;t1=CTime::GetCurrentTime();m_bar.SetPaneText(1,t1.Format("%H:%M:%S"));这样在程序刚启动时就会显示系统时间,然后实时更新。

MFC树形控件(CTreeCtrl)用法

MFC树形控件(CTreeCtrl)用法

MFC树形控件(CTreeCtrl)用法树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点。

MFC中使用CTreeCtrl类来封装树形控件的各种操作。

通过调用BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一些树形控件的专用风格:TVS_HASLINES 在父/子结点之间绘制连线TVS_LINESATROOT 在根/子结点之间绘制连线TVS_HASBUTTONS 在每一个结点前添加一个按钮,用于表示当前结点是否已被展开TVS_EDITLABELS 结点的显示字符可以被编辑TVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点TVS_DISABLEDRAGDROP 不允许Drag/DropTVS_NOTOOLTIPS 不使用ToolTip显示结点的显示字符在树形控件中每一个结点都有一个句柄(HTREEITEM),同时添加结点时必须提供的参数是该结点的父结点句柄,(其中根Root结点只有一个,既不可以添加也不可以删除)利用HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAf ter = TVI_LAST );可以添加一个结点,pszItem为显示的字符,hParent代表父结点的句柄,当前添加的结点会排在hInsertAf ter表示的结点的后面,返回值为当前创建的结点的句柄。

下面的代码会建立一个如下形式的树形结构:+--- Parent1+--- Child1_1+--- Child1_2+--- Child1_3+--- Parent2+--- Parent3/*假设m_tree为一个CTreeCtrl对象,而且该窗口已经创建*/HTREEITEM hItem,hSubItem;hItem = m_tree.InsertItem("Parent1",TVI_ROOT);在根结点上添加Parent1hSubItem = m_tree.InsertItem("Child1_1",hItem);//在Parent1上添加一个子结点hSubItem = m_tree.InsertItem("Child1_2",hItem,hSubItem);//在Parent1上添加一个子结点,排在Child1_1后面hSubItem = m_tree.InsertItem("Child1_3",hItem,hSubItem);hItem = m_tree.InsertItem("Parent2",TVI_ROOT,hItem);hItem = m_tree.InsertItem("Parent3",TVI_ROOT,hItem);如果你希望在每个结点前添加一个小图标,就必需先调用CImageList* SetImageList( CImageList * pImageList, int nImageListType );指明当前所使用的ImageList,nImageListType为TVSIL_NORMAL。

mfc对话框基础要点

mfc对话框基础要点

第五章对话框对话框是一种用户界面,它的主要功能是输出信息和接收用户的输入。

对话框与控件是密不可分的,在每个对话框内一般都有一些控件,对话框依靠这些控件与用户进行交互。

一个典型的对话框例子是选择了File-Open命令后弹出的文件对话框。

5.1对话框和控件的基本概念5.1.1对话框的基本概念对话框(Dialog)实际上是一个窗口。

在MFC中,对话框的功能被封装在了CDialog类中,CDialog类是CWnd类的派生类。

对话框分为模态对话框和非模态对话框两种。

大部分读者都会有这样的经历,当你通过File-Open命令打开一个文件对话框后,再用鼠标去选择菜单将只会发出嘟嘟声,这是因为文件对话框是一个模态对话框。

模态对话框垄断了用户的输入,当一个模态对话框打开时,用户只能与该对话框进行交互,而其它用户界面对象收不到输入信息。

我们平时所遇到的大部分对话框都是模态对话框。

非模态对话框的典型例子是Windows95提供的写字板程序中的搜索对话框,搜索对话框不垄断用户的输入,打开搜索对话框后,仍可与其它用户界面对象进行交互,用户可以一边搜索,一边修改文章,这样就大大方便了使用。

本节主要介绍模态对话框,在第四节将介绍非模态对话框。

从MFC编程的角度来看,一个对话框由两部分组成:1.对话框模板资源。

对话框模板用于指定对话框的控件及其分布,Windows根据对话框模板来创建并显示对话框。

2.对话框类。

对话框类用来实现对话框的功能,由于对话框行使的功能各不相同,因此一般需要从CDialog类派生一个新类,以完成特定的功能。

5.1.2控件的基本概念图5.1对话框中的控件控件(Control)是独立的小部件,在对话框与用户的交互过程中,控件担任着主要角色。

控件的种类较多,图5.1显示了对话框中的一些基本的控件。

MFC的控件类封装了控件的功能,表5.1介绍了一些常用的控件及其对应的控件类。

表5.1控件实际上都是窗口,所有的控件类都是CWnd类的派生类。

Word2010如何实现鼠标指向自动显示提示文字

Word2010如何实现鼠标指向自动显示提示文字

Word2010如何实现鼠标指向自动显示提示文字在对Word文档进行操作时,经常需要给一些关键地方添加提示文字,但又不能让提示影响到原文的视图和打印效果。

因此想让提示文字只在鼠标靠近时自动显示,当鼠标移开时就得自动消失。

请问在Word中是否有办法可实现类似的效果呢?在Word2010中有两种方法可以达到你要求的鼠标指向自动显示和隐藏的效果:使用超链接和尾注,他们各有优劣,小编来教你使用这两种方法。

一、超链接在Word2010文档中,当鼠标指针指向超链接时默认将显示链接地址。

不过用户可以根据需要自定义超链接屏幕提示文字,操作步骤如下所述:第1步,打开Word2010文档窗口,选中需要创建超链接的文字(也可以不用选中任何文字,只是将插入条光标移动到要插入超链接的位置)。

切换到“插入”功能区,在“链接”分组中单击“超链接”按钮。

第2步,打开“插入超链接”对话框,“要显示的文字”编辑框中已经自动输入文字内容,在“地址”编辑框输入链接地址(由于不用通过Ctrl 单击跳转,只需要提示,地址任意输入即可)。

第3步,单击“屏幕提示”按钮,在打开的“设置超链接屏幕提示”对话框中输入屏幕提示文字内容,并单击“确定”按钮,该文字会变成蓝色并加下划线。

三联推荐:点击免费下载最新版WPS办公软件》》查看更多办公软件教程第4步,返回“插入超链接”对话框,单击“确定”按钮。

在Word2010文档中指向超链接文字,将显示自定义的超链接屏幕提示。

小提示:超链接变成蓝色并加下划线会影响打印效果,选中任意一个链接把字体颜色设置为“自动”,并取消下划线让它恢复原样。

然后在该链接文字上点击鼠标右键选择“样式”然后点选“更新超链接以匹配所选内容”,确定后即可让所有链接文本格式与正文一致。

二、尾注先把输入光标定位到要添加提示的文字后,切换到“引用”选项卡,单击“插入尾注”,输入光标会自动定位到文章最后,在此输入提示即可。

现在再回到添加尾注的地方,可看到右上角有一个编号“i”,鼠标指向这个编号或之前的一个字,就会显示出提示了,双击编号即可跳转到最后一页对应的提示处进行修改。

mfc单文档onmousewheel用法

mfc单文档onmousewheel用法

mfc单文档onmousewheel用法使用MFC单文档应用程序开发时,可以通过重写"OnMouseWheel"函数来捕获鼠标滚轮事件。

OnMouseWheel函数是在CView类中定义的,用于处理鼠标滚轮滚动事件。

以下是一般的OnMouseWheel函数的用法示例:```BOOL CMyView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt){//获取当前鼠标光标的位置CPoint pos = GetScrollPosition();//根据鼠标滚轮的滚动方向和距离,确定滚动的大小int delta = zDelta / WHEEL_DELTA;//根据滚动方向,滚动视图内容if (delta > 0) {pos.y -= delta * SCROLL_LINE_HEIGHT;} else {pos.y += abs(delta) * SCROLL_LINE_HEIGHT;}//设置滚动位置SetScrollPosition(pos);//返回TRUE,表示已经处理了该消息return TRUE;}```在此示例中,变量`nFlags`表示鼠标滚轮事件的附加标志,`zDelta`表示滚轮滚动的距离,`pt`表示滚轮事件发生的位置。

我们可以根据滚动方向和距离来确定滚动视图内容,并设置滚动的位置。

在这个例子中,通过计算每行的高度(`SCROLL_LINE_HEIGHT`)和滚动的距离来确定滚动的大小。

然后,使用`SetScrollPosition`函数设置新的滚动位置。

需要注意的是,为了使OnMouseWheel函数生效,还需要在视图类的头文件中添加消息映射。

可以在消息映射中添加`ON_WM_MOUSEWHEEL()`宏,使MFC能够正确分派鼠标滚轮消息。

除了上述用法外,也可以根据具体需求对OnMouseWheel函数进行拓展。

MFC中的消息响应(左键按下鼠标)和(移动鼠标)

MFC中的消息响应(左键按下鼠标)和(移动鼠标)

MFC中的消息响应(左键按下鼠标)和(移动鼠标)p.s. 以下两种方法一起使用的时候,运行起来有错误哇~1. 左键按下鼠标:右键view类,添加消息句柄,WM_LBUTTONDOWN,添加并编辑,加入代码,可以实现在矩形区域内点击鼠标左键,弹出确认框的功能:int x=point.x;int y=point.y;if(x>=0&&x<=119&&y>=0&&y<=64)MessageBox("点击在图片内部!");2. 移动鼠标:添加消息句柄WM_MOUSEMOVE,添加代码,可以实现在指定位置显示当前鼠标坐标的功能:int x=point.x;int y=point.y;CString st;st.Format(("%d,%d"),x,y);CDC *pDC=GetDC(); //定义一个PDC用来输出pDC->TextOut(200,200,st);ReleaseDC(pDC); //用完自定义的PDC要释放SetCursor(LoadCursor(NULL,IDC_CROSS)); //通过LoadCursor获得鼠标形状,然后用SetCursor改变鼠标形状p.s. 以下两种方法一起使用的时候,运行起来有错误哇~1. 左键按下鼠标:右键view类,添加消息句柄,WM_LBUTTONDOWN,添加并编辑,加入代码,可以实现在矩形区域内点击鼠标左键,弹出确认框的功能:int x=point.x;int y=point.y;if(x>=0&&x<=119&&y>=0&&y<=64)MessageBox("点击在图片内部!");2. 移动鼠标:添加消息句柄WM_MOUSEMOVE,添加代码,可以实现在指定位置显示当前鼠标坐标的功能:int x=point.x;int y=point.y;CString st;st.Format(("%d,%d"),x,y);CDC *pDC=GetDC(); //定义一个PDC用来输出pDC->TextOut(200,200,st);ReleaseDC(pDC); //用完自定义的PDC要释放SetCursor(LoadCursor(NULL,IDC_CROSS)); //通过LoadCursor获得鼠标形状,然后用SetCursor改变鼠标形状。

MFC模拟鼠标点击

MFC模拟鼠标点击

MFC模拟⿏标点击MFC ⼯程把以下代码放到你想要响应的函数⾥⾯就⾏CPoint pt;GetCursorPos(&pt);//获取⿏标在屏幕的当前位置SetCursorPos(100,200);//移动到某点坐标mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);//点下右键mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);//松开右键mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//点下左键mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//松开左键BOOL SetCursorPos( int X, // horizontal position int Y // vertical position ); 设置⿏标位置。

⿏标指针在屏幕像素坐标系统中的X,Y位置 这个函数是⽤来设置Mouse位置的。

可以⽤这个函数来移动mouse在屏幕上的移动。

另外⼀个函数功能⽐较强,即mouse_event()VOID mouse_event( DWORD dwFlags, DWORD dx, DWORD , DWORD dwData, DWORD dwExtraInfo ); 设置mouse状态。

参数说明如下: dwFlags Long,下述标志的⼀个组合: MOUSEEVENTF_ABSOLUTE dx和dy指定⿏标坐标系统中的⼀个绝对位置。

在⿏标坐标系统中,屏幕在⽔平和垂直⽅向上均匀分割成65535×65535个单元 MOUSEEVENTF_MOVE 移动⿏标 MOUSEEVENTF_LEFTDOWN 左键按下 MOUSEEVENTF_LEFTUP 模拟⿏标左键抬起 MOUSEEVENTF_RIGHTDOWN 模拟⿏标右键按下 MOUSEEVENTF_RIGHTUP 模拟⿏标右键按下 MOUSEEVENTF_MIDDLEDOWN 模拟⿏标中键按下 MOUSEEVENTF_MIDDLEUP 模拟⿏标中键按下 dx 根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定⽔平⽅向的绝对位置或相对运动 dy 根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直⽅向的绝对位置或相对运动 dwData amount of wheel movement dwExtraInfo,通常未⽤的⼀个值。

MFC控件使用详细教程

MFC控件使用详细教程

使用Windows标准控件我们在前面曾提到过,控件是一些行为标准化了的窗口,一般用于对话框或其它窗口中充当与用户交互的元素。

在Visual C++中,可以使用的控件分成三类:(1) Windows标准控件Windows标准控件由Windows操作系统提供,在Windows 95中还提供了一些新增的控件。

所有这些控件对象都是可编程的,我们可以使用Visual C++提供的对话框编辑器把它们添加到对话框中。

Microsoft基础类库(MFC)提供了封装这些控件的类,它们列于表6.1。

表6.1 Windows标准控件续表6.1前面提到过,在MFC中,类CWnd是所有窗口类的基类,很自然的,它也是所有控件类的基类。

Windows标准控件在以下环境下提供:•Windows 95•Windows NT 3.51及以后版本•Win32s 1.3•注意:•Visual C++ 4.2及以后版本不再支持Win32s。

(2) ActiveX控件ActiveX控件可用于对话框中,也可用于HTML文档中。

这种控件过去被称为OLE 控件。

本书将在专门的章节中来讲述关于ActiveX控件的知识。

这里仅指出ActiveX控件使用了与标准控件完全不同的接口和实现方法。

(3) 其它MFC控件类除了Windows标准控件和自己编写的或者来自于第三方软件开发商的ActiveX 控件以外,MFC还提供了另外三种控件,它们由下面的三个类进行封装:•类CBitmapButton用于创建以位图作为标签的按钮,位图按钮最多可以包括四个位图图片,分别代表按钮的四种不同状态。

•类CCheckListBox用于创建选择列表框,这种列表框中的每一项前面有一个复选框,以决定该项是否被选中。

•类CDragListBox用于创建一种特殊的列表框,这种列表框允许用户移动列表项。

在本章我们仅讲述第一类控件,即Windows标准控件。

所涉及的内容包括各个控件的使用及相应的技巧。

word鼠标划过自动显示提示文字的方法

word鼠标划过自动显示提示文字的方法

∙word鼠标划过自动显示提示文字的方法excel表格的基本操作:平时提交给领导的讲话稿和总结文档中,经常需要给一些关键地方添加提示文字,但又不能让提示影响到原文的视图和打印效果。

因此想让提示文字只在鼠标靠近时自动显示,当鼠标移开时就得自动消失。

请问在Word中是否有办法可实现类似的效果呢? 在Word2010中有两种方法可以达到你要求的鼠标指向自动显示和隐藏的效果:使用超链接和尾注,他们各有优劣,董师傅先来教你使用这两种方法。

1.超链接选中要添加提示的文字,切换到“插入”选项卡,单击“超链接”,在“插入超链∙怎样打印word中宽图片excel表格的基本操作:在通常的办公应用中,我们的纸张类型都是纵向排列的。

但有时文档中插入的图表的宽度会大于纸宽。

这时大家往往会把图表单独拷贝到一个新文档中,然后将纸张方向设为横向。

这样往往会影响页码的排列,而且操作也比较麻烦。

合理利用Word的分节符这个问题即可轻松解决。

首先将光标定位在要插入图标的上方,然后打开“插入”菜单,选择“分隔符”命令,在打开的窗口中把“分节符类型”设为“下一页”。

用同样的方法,在插入图片的后面再插入一个“下一页”分节符。

∙PDFMaker文件遗失怎么解决excel表格的基本操作:相信大家在安装完Office2007和Adobe Acrobat Professional 8.0后,制作pdf文件时出现过“PDFMaker文件遗失”,最初发现是文件格式问题,Acrobat Professional 8.0只支持docx(微软新的文档格式),然而doc却不支持,现在Adobe出了Adobe Acrobat Professional 8.0的升级包8.1,已经很好解决了这个问题,大家可以去试试!^_^ 升级包下载地址 /adobe/acrobat/win/8.x/8.1/misc/AcrobatUpd810_cck_incr.msp 直接打开Adobe Acrobat 7.0 Professional创建DO∙第三讲编辑工作表excel表格的基本操作:第三讲Excel2003编辑工作表,本节知识点有,修改单元格中的数据,移动和复制单元格,选择性粘贴单元格,粘贴选项按钮,恢复和撤销。

MFC_基本控件使用

MFC_基本控件使用

分组框
6
CButton 类的成 员函数
GetCheck() SetCheck() GetButtonStyle() SetButtonStyle() GetState() SetState() CheckDlgButton CheckRadioButton GetCheckedRadioButton Is DlgButtonChecked GetWindowTex GetWindowTextLength SetWindowText 7
方法 EnableScrollBar() GetScrollInfo() GetScrollLimit() GetScrollPos() GetScrollRange() SetScrollInfo() SetScrollPos() SetScrollRange() ShowScrollBar() CScrollBar 类的方法 说明 使滚动条的一个或两个箭头有效或无效 获得滚动条的消息 获得滚动条的范围 获得滚动条当前的位置 获得制定滚动条的当前最大和最小滚动位置 设置滚动条的消息 设置滚动块当前的位置 设置制定滚动条的最大和最小滚动位置 14 显示或隐藏滚动条
24
case SB_PAGEUP: //单击箭头与滚块之间的区域 iNowPos=m_Scrollbar.GetScrollPos(); iNowPos=iNowPos-3; if(iNowPos<0) iNowPos=0; m_Scrollbar.SetScrollPos(iNowPos); itoa(m_Scrollbar.GetScrollPos(),sPos,10); m_Edit.SetSel(0,-1); m_Edit.ReplaceSel(sPos); break; } } 25 CDialog::OnVScroll(nSBCode, nPos, pScrollBar); }

CTooTipCtrl详细说明

CTooTipCtrl详细说明

ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法。

一般用法步骤:1.添加CToolTipCtrl成员变量 m_tt。

2.在父窗口中调用EnableToolTips(TRUE);3.在窗口的OnCreate(或者其他适当的位置)中向ToolTip中添加需要显示Tip的子窗口,并同时指定相应的显示字串CToolTipCtrl::AddTool(pWnd,"string to display")。

4.重载父窗口的BOOLPreTranslateMessage(MSG* pMsg) ,在函数中调用 m_tt.RelayEvent(pMsg)。

下面假设在窗口CWndYour中使用CToolTipCtrl在类定义中添加变量说明:class CWndYour:xxx{CToolTipCtrl m_tt;}在OnCreate中添加需要显示Tip的子窗口CWndYour::OnCreate(....){EnableToolTips(TRUE);m_tt.Create(this);m_tt.Activate(TRUE);CWnd* pW=GetDlgItem(IDC_CHECK1);//得到窗口指针m_tooltip.AddTool(pW,"Check1");//添加........}在BOOL PreTranslateMessage(MSG* pMsg)中添加代码BOOL CWndYour::PreTranslateMessage(MSG* pMsg){{m_tt.RelayEvent(pMsg);}return CParentClass::PreTranslateMessage(pMsg);}这样当鼠标移动到相应的子窗口上时会显示出相应的ToolTip。

动态改变ToolTip的显示内容的方法及步骤:1.上面所讲的1、2、4步骤。

Windows程序设计题(含简答题答案)

Windows程序设计题(含简答题答案)

《Windows程序设计》模拟题一.单项选择题1. 在VC++中,项目文件的扩展名是(B)。

A)exe B)dspC)d sw D)cpp2. 在MFC中,利用ClassWizard不能(D)。

A)建立新类B)进行消息映射C)增加类的成员变量D)插入资源3. 当滑块滑动时,滑块条控件将发送滚动消息来通知父窗口,垂直滑动条发送(C)消息。

A)WM_CHAR B)WM_HSCROLLC)W M_VSCROLL D)WM_CHANGE4. 更新菜单状态的消息是(C )。

A)WM_COMMAND B)UPDATEC)UPDATE_COMMAND_UI D)INVALIDATE5. 对于消息队列描述正确的是( D )A)在Windows中只有一个消息系统,即系统消息队列。

消息队列是一个系统定义的数据结构,用于临时存储消息。

B)系统可从消息队列将信息直接发给窗口。

另外,每个正在Windows下运行的应用程序都有自己的消息队列。

C)系统消息队列中的每个消息最终都要被USER模块传送到应用程序的消息队列中去。

应用程序的消息对列中存储了程序的所有窗口的全部消息。

D)以上都正确6. 在MFC中,所有的控件都是(B)类的派生类,都可以作为一个特殊的窗口来处理。

A)CView B)CWndC)C Window D)CDialog7. 使用GetDC()获取的设备上下文在退出时,必须调用(A)释放设备上下文。

A)ReleaseDC() B)delete()C)D eleteDC() D)Detach()8. 希望菜单无效,应该用CCmdUI类的(A)成员函数。

A)Enable B)SetRadioC)S etCheck D)SetText9. 希望菜单前出现一个“√”,应该用CCmdUI类的(C)成员函数。

A)Enable B)SetRadioC)SetCheck D)SetText10. 下面(A)不是MFC设备环境类CDC类的派生类。

MFC鼠标拖动效果编程

MFC鼠标拖动效果编程

代码主要在三处地方修改了:
第一处:VIEW类中设置私有变量(VIEW类.h文件中)
private:
BOOL m_startRect; //绘制矩形框标志
CPoint m_startPoint; //矩形框开始点
CPoint m_OldPoint; //矩形框终点(但是它是上一次的点,所以这里用了Old标识)
//这样,如果连续绘制两次的话,就可以恢复原来屏幕的颜色了(如下)
//但是,这里的连续两次绘制却不是在一次消息响应中完成的
//而是在第一次拖动响应的绘制可以显示(也就是看到的),第二次拖动绘制实现擦出(也就看不到了)
dc.SetROP2(R2_NOT); //此为关键!!!如果设置为R2_XORPEN 则为画笔的反色
CView::OnLButtonUp(nFlags, point);
}
//消隐最后的一个矩形(其原理跟拖动时矩形框绘制原理相同)
CClientDC dc(this);
dc.SetROP2(R2_NOT);
dc.SelectStockObject(NULL_BRUSH);
dc.Rectangle(CRect(m_startPoint,m_OldPoint));
dc.SelectStockObject(NULL_BRUSH); //不使用画刷
if (TRUE == m_startRect) //根据是否有单击判断是否可以画矩形
{
dc.Rectangle(CRect(m_startPoint,m_OldPoint));
dc.Rectint));
【MFC鼠标拖动效果编程 】
要实现的功能实际上很简单,一般人都用到见惯不惯了,但是实现起来还是有点意思的。

MFC对话框禁止移动 使标题栏不响应鼠标消息 通过客户区移动窗体 OnNcHitTest()的实现

MFC对话框禁止移动 使标题栏不响应鼠标消息 通过客户区移动窗体 OnNcHitTest()的实现

MFC对话框禁止移动使标题栏不响应鼠标消息通过客户区移动窗体OnNcHitTest()的实现//这个函数允许我们对windows鼠标消息进行处理对于基类函数的返回值我们可以通过判断消息类型来进行不同的处理//也就是说我们可以对鼠标消息做任意处理比如是菜单栏上的消息我们可以返回标题栏的值//对应的消息类型有如下查找MSDN此函数的值有介绍UINT CMyDlg::OnNcHitTest(CPoint point){UINT nFlags= CDialog::OnNcHitTest(point); //调用基类的OnNcHitTest获得返回值if(nFlags==HTCAPTION||nFlags==HTSYSMENU) //如果鼠标消息是在标题栏上或者系统菜单栏我们就返回FALSE 不进行处理{return FALSE ;}else if(nFlags==HTCLIENT) //可以通过客户区域移动窗体但是不能通过标题栏移动return HTCAPTION ;elsereturn nFlags;}下面是一些测试枚举值::OnNcHitTestafx_msg UINT OnNcHitTest( CPoint point );返回值:下面列出的鼠标击中测试枚举值之一。

· HTBORDER 在不具有可变大小边框的窗口的边框上。

· HTBOTTOM 在窗口的水平边框的底部。

· HTBOTTOMLEFT 在窗口边框的左下角。

· HTBOTTOMRIGHT 在窗口边框的右下角。

· HTCAPTION 在标题条中。

· HTCLIENT 在客户区中。

· HTERROR 在屏幕背景或窗口之间的分隔线上(与HTNOWHERE相同,除了Windows的DefWndProc函数产生一个系统响声以指明错误)。

· HTGROWBOX 在尺寸框中。

MFC教程

MFC教程

MFC教程VS2022/MFC编程入门之二十四(常用控件:列表框控件LitBo某)前面两节讲了比较常用的按钮控件,并通过按钮控件实例说明了具体用法。

本文要讲的是列表框控件(LitBo某)及其使用实例。

列表框控件简介列表框给出了一个选项清单,允许用户从中进行单项或多项选择,被选中的项会高亮显示。

列表框可分为单选列表框和多选列表框,顾名思义,单选列表框中一次只能选择一个列表项,而多选列表框可以同时选择多个列表项。

列表框也会向父窗口发送通知消息。

这些通知消息及含义如下:LBN_DBLCLK:用户用鼠标双击了一列表项,只有具有LBS_NOTIFY的列表框才能发送该消息LBN_ERRSPACE:列表框不能申请足够的动态内存来满足需要LBN_KILLFOCUS:列表框失去输入焦点LBN_SELCANCEL:当前的选择被取消,只有具有LBS_NOTIFY的列表框才能发送该消息LBN_SELCHANGE:单击鼠标选择了一列表项,只有具有LBS_NOTIFY的列表框才能发送该消息LBN_SETFOCUS:列表框获得输入焦点WM_CHARTOITEM:当列表框收到WM_CHAR消息后,向父窗口发送该消息,只有具有LBS_WANTKEYBOARDINPUT风格的列表框才会发送该消息WM_VKEYTOITEM:当列表框收到WM_KEYDOWN消息后,向父窗口发送该消息,只有具有LBS_WANTKEYBOARDINPUT风格的列表框才会发送该消息列表框控件的创建MFC将列表框控件的所有操作都封装到了CLitBo某类中。

创建列表框控件时,可以在对话框模板中直接拖入列表框控件Litbo 某,然后添加控件变量使用。

但如果需要动态创建列表框,就要用到CLitBo某类的Create成员函数了。

Create成员函数的原型如下:virtualBOOLCreate(DWORDdwStyle,contRECT&rect,CWnd某pParentWnd,UINTnID);参数rect指定了列表框的位置和尺寸,pParentWnd为父窗口的指针,nID用于指定列表框控件的ID。

MFC中非模态对话框不响应PreTranslateMessage函数的解决方法

MFC中非模态对话框不响应PreTranslateMessage函数的解决方法

MFC中非模态对话框不响应PreTranslateMessage函数的解决方法程序员真心不容易啊,为了一个好的用户体验真可谓是操碎了心。

今天由于项目需要,需要在非模态对话框上,当鼠标处于某个位置的时候有提示框显示。

实现这个功能本来很简单,但是却遇到了一个郁闷的问题:PreTranslateMessage函数没响应。

于是各种度娘,可惜度娘非谷歌,找了一个小时终于在一个隐蔽的地方找到了解决方法。

首先我介绍下当鼠标处于特定位置的时候有提示信息显示的实现方法。

需要使用MFC的CToolTipCtrl控件。

1.首先在Dialog类中添加一个成员对象[cpp]view plain copy1.//消息提示框2. CToolTipCtrl m_toolTip;</span></span>1.//创建消息提示框2. EnableToolTips(TRUE);//enable use it3.BOOL bRet = m_toolTip.Create(this, TTS_ALWAYSTIP | WS_CHILD | WS_VISIBLE);4. m_toolTip.AddTool(this);5. m_toolTip.Activate(TRUE);6. m_toolTip.SetDelayTime(150);</span></span>3.捕获鼠标的移动消息OnMouseMove,当鼠标处在某一特定区域的时候,弹出消息提示框。

切换消息内容使用CToolTipCtrl::UpdateTipText函数。

[cpp]view plain copy1.void CDisplayPicDlg::OnMouseMove(UINT nFlags, CPoint point)2.{3.//如果鼠标在矩形所在区域,需要把箭头鼠标变成手型的4.int iSel = GetSelectCameraNo(point);5.if(-1 != iSel)6. {7. SetCursor(LoadCursor(NULL, IDC_HAND));8. m_toolTip.UpdateTipText(m_stMonitorCamera[iSel].szCamereName, this);9. }10.else//还原成箭头鼠标形式11. {12. SetCursor(LoadCursor(NULL, IDC_ARROW));13. m_toolTip.UpdateTipText("", this);14. }15.if(-1 != m_lCameraIdPre)16. {17. SetCursor(LoadCursor(NULL, IDC_ARROW) );18. }19.//.....................20.}1.BOOL CDisplayPicDlg::PreTranslateMessage(MSG* pMsg)2.{3. m_toolTip.RelayEvent(pMsg);4.return CDialog::PreTranslateMessage(pMsg);5.}6.<span style="font-family:Arial;BACKGROUND-COLOR: #ffffff"></span>好了,做到这四部就基本完成了。

wincc中实现弹窗跟随鼠标功能的具体方法

wincc中实现弹窗跟随鼠标功能的具体方法

WinCC鼠标事件实现弹窗跟随鼠标的功能的具体方法在WinCC(Windows Control Center)中实现弹窗跟随鼠标的功能,你需要结合WinCC的脚本功能和C++编程知识。

下面是一个基本的步骤和示例代码,但请注意,实际的操作可能需要根据WinCC的版本和配置进行调整。

1.定义弹窗的位置变量:首先,你需要定义一个变量来存储弹窗的位置。

这个变量应该是一个结构,包含x和y坐标。

2.使用鼠标事件更新位置:当鼠标移动时,触发一个事件或过程,这个事件或过程将更新上述位置变量的值。

3.动态显示弹窗:使用WinCC的脚本功能,根据位置变量的值动态地显示和隐藏弹窗。

以下是一个简化的C++示例代码,演示了如何根据鼠标位置显示一个弹窗:#include "windows.h"#include "mmsystem.h"#include "WinCC.h"// 定义弹窗的位置结构struct PopupPosition {double x;double y;};// 获取当前鼠标位置并更新弹窗位置void UpdatePopupPosition(PopupPosition& popupPos) {POINT cursorPos;GetCursorPos(&cursorPos);popupPos.x = cursorPos.x;popupPos.y = cursorPos.y;}// 显示弹窗函数void ShowPopup() {// 此处应该有显示弹窗的代码,例如使用WinCC的API函数}// 隐藏弹窗函数void HidePopup() {// 此处应该有隐藏弹窗的代码,例如使用WinCC的API函数}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {// 初始化WinCC和相关资源...PopupPosition popupPos;while (true) { // 主循环UpdatePopupPosition(popupPos); // 获取并更新鼠标位置ShowPopup(); // 根据位置显示弹窗Sleep(100); // 休眠一段时间,例如100毫秒,控制更新频率HidePopup(); // 隐藏弹窗}return 0;}这个示例是非常基础的,并且可能需要根据你的具体需求进行调整。

VS2010MFC 指示灯报警显示

VS2010MFC 指示灯报警显示

MFC 指示灯报警显示
方法一
直接给CButton加图片的方法:
1.在资源编辑器中添加一个按钮.把它的Bitmap属性设为true
2.在按钮上点右键,添加一个变量m_Btn(CButton类型的)
3.将图片导入到资源管理器中.ID为IDB_BITMAP1
4.然后在OnInitialUpdate中初始化中加入如下代码:
HBITMAP hBmp=::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1));
m_Btn.SetBitmap(hBmp);
方法二
1.
2.
3.
4.
5.
6.使用CBitmapButton::LoadBitmaps装载各种状态的图片,再用SubclassDlgItem关联到
想要的按钮,使用
CBitmapButton::SizeToContent函数使按钮适合图片大小。

注意Loadbitmaps一定要在关联到按钮之前进行!
7.为按钮控件添加单击事件处理函数,输入如下代码:
8.
9.按理来说,写上m_ctrlButton.LoadBitmaps(图片ID);就可以了,可是这样做之后,
发现按键了没反应。

无意中将对话框最小化再还原,发现图片变了。

所以实际上是没有进行刷新导致的。

在后面加上m_button.Invalidate()就可以了。

10.运行程序
11.
12.单击控件按钮变成红色
13.。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档