上一页 1 ··· 7 8 9 10 11 12 13 14 下一页
摘要: 把你的Windows任务栏移到屏幕的上方,你就会发现有多少程序会在启动的时候,把自己的标题栏移到任务栏的下方,以至于不能用鼠标移动它,甚至有的窗口还没有系统菜单(Atl + 空格 打开系统菜单,可以移动窗口)。所以,这篇文章我们来讨论一下窗口的位置,以避免这样的事情发生。如果让你写个程序,要把窗口的位置移动到桌面的左上角,我想很多人都会写出如下的代码:MoveWindow(hWnd,0,0,?,?);后面?的位置如何填写呢?很多人就会找到GetWindowRect函数来得到当前窗口的宽度。当然,这么写也不是不可以。我觉得更好的方式是使用SetWindowPos函数。MoveWindow函数有个 阅读全文
posted @ 2013-03-14 14:17 归海一刀 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 对于COM,一般用CoCreateInstance来创建对象,这就要求COM的dll要用regsvr32注册,因为CoCreateInstance是要读注册表信息完成相应操作的。CoCreateInstance主要的工作是读注册表,然后CoLoadLibrary,调用DllGetClassObject,最后CreateInstance创建对象。如果我们自己来实现CoCreateInstance的工作,就可以实现无注册表的COM调用。假设有个简单COM,接口很简单,就是个减法函数。普通COM的代码是这样的://普通COMvoid TestCom1(){cout<<"Test 阅读全文
posted @ 2013-03-14 14:06 归海一刀 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做TMsg,它在Windows单元中是这样声明的:typeTMsg = packed recordhwnd: HWND; / /窗口句柄message: UINT; / /消息常量标识符wParam: WPARAM ; // 32位消息的特定附加信息lParam: LPAR 阅读全文
posted @ 2013-03-13 14:28 归海一刀 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 目的还是为了大家进一步熟悉Windows的窗口实现消息的机制,也使大家了解多一点的Windows API 函数,从而利于日后的实际编程。平常我们都是用鼠标拖着窗口来改变窗口的,今天我们来点新鲜的,通过单击鼠标来使窗口改变位置。从前面的知识中,我们知道,窗口的初始位置是在CreateWindow函数中设定的,Windows既然可以让用户通过鼠标拖来改变窗口位置,那么肯定就有函数是专门用来改变窗口位置的。是的,的确有这样的函数,常用的有两个,它们是etWindowPos和MoveWindow。两个函数的详细情况如下:SetWindowPos 函数功能:该函数改变一个子窗口,弹出式窗口式顶层窗口的. 阅读全文
posted @ 2013-03-13 14:26 归海一刀 阅读(947) 评论(0) 推荐(0) 编辑
摘要: 转自于:http://hi.baidu.com/max_new/blog/item/e2bbe607b1f127c57b8947c0.html许多软件,特别是占桌面面积不是很大的软件,通常都提供了一个常居顶端的功能(可能有的软件不是这么叫法,但作用是相同的),它的作用是保持窗口一直在其他窗口的上面,可以省去频繁切换窗口的动作。如果你想这么做,有一个API可以实现: SetWindowPos,声明是这样的: Private Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (By 阅读全文
posted @ 2013-03-12 22:36 归海一刀 阅读(850) 评论(0) 推荐(0) 编辑
摘要: 在窗口大小发生改变时,系统往窗口发送WM_SIZE消息,WPARAM指出窗口新的状态,LPARAM给出窗口新的大小。窗口的状态有三种:SIZE_MINIMIZE,SIZE_MAXIMIZE,SIZE_RESTORED。系统根据当前窗口的状态,在产生WM_SIZE消息时指定不同的WPARAM。然而,系统如何知道窗口当前的状态。很显然,系统必须用一些内存保存窗口当前的状态。保存在哪里呢? 用spy++观察一个窗口,很快就可以发现在窗口最大化、最小化、正常状态下,style的值是不同的。在最小化时,会多出WS_MINIMIZE,在最大化时会多出WS_MAXIMIZE,在正常状态下则没有这两个值。所以 阅读全文
posted @ 2013-03-12 21:58 归海一刀 阅读(773) 评论(0) 推荐(0) 编辑
摘要: 使用WM_MOUSEWHEEL 需要把CWnd设定为Focus ON_WM_MOUSEWHEEL( ) CWnd::OnMouseWheel afx_msg BOOL OnMouseWheel( UINT nFlags, short zDelta, CPoint pt ); 返回值:如果允许鼠标轮滚动,则返回非零值;否则返回0。 参数: nFlags 指明是否按下了虚拟键。这个参数可以是下列值的组合: · MK_CONTROL 如果CTRL键被按下,则设置此位。 · MK_LBUTTON 如果鼠标左键被按下,则设置此位。 · MK_MBUTTON 如果鼠标中键被按 阅读全文
posted @ 2013-03-12 09:34 归海一刀 阅读(223) 评论(0) 推荐(0) 编辑
摘要: WM_ACTIVE的消息参数wParam的低阶word指示窗口是被激活还是失去激活:WA_ACTIVE,被鼠标点击以外的方法激活;WA_CLICKACTIVE,由鼠标点击激活;WA_INACTIVE,失去激活;wParam的高阶word指示窗口是否被最小化;非零表示最小化;lPararm表示将激活的窗口句柄(WA_INACTIVE),或者将失去激活的窗口句柄(WA_CLICKACTIVE、WA_ACTIVE)。在标准Windows消息处理的章节中,曾指出处理WM_ACTIVE消息时,先要调用一个函数_AfxHandleActivate,此函数的原型如下: static void AFXAPI. 阅读全文
posted @ 2013-03-12 09:22 归海一刀 阅读(2523) 评论(0) 推荐(0) 编辑
摘要: 默认情况下,窗口是不响应 WM_MOUSELEAVE 和 WM_MOUSEHOVER 消息的,所以要使用 _TrackMouseEvent 函数来激活这两个消息。调用这个函数后,当鼠标在指定窗口上停留超过一定时间或离开窗口后,该函数会 Post 这两个消息到指定窗口。使用方法:1. 在对话框类中定义一个变量来标识是否追踪当前鼠标状态,之所以要这样定义是要避免鼠标已经在窗体之上时,一移动鼠标就不断重复产生 WM_MOUSEHOVER 。 BOOL _bMouseTrack=TRUE ;2. 在 OnMouseMove 中调用 _TrackMouseEvent 函数 if (_bMouseTrac 阅读全文
posted @ 2013-03-11 16:08 归海一刀 阅读(279) 评论(0) 推荐(0) 编辑
摘要: WM_CLOSE WM_QUIT WM_DESTROY 三者的区别 收藏 一直以来,我都不是很明白这三个的区别,今天看了一写文章,才明白过来,一下是转载的文字:有三个消息看起来差不多,都是处理关闭的事情的。它们是WM_DESTROY,WM_CLOSE,和WM_QUIT。它们的确很相似,但你需要知道它们之间的不同!一个窗口或者应用程序应该被关闭时发出WM_CLOSE消息,当接收到WM_CLOSE消息时,如果你愿意,向用户提出是否真的退出。你知道让用户作确认或有错误出现或有什么应该注意的事情发生的时候,往往弹出一个消息框。插播消息框int MessageBox(HWND hWnd, // hand 阅读全文
posted @ 2013-03-11 16:04 归海一刀 阅读(406) 评论(0) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 14 下一页