积累的VC编程小技巧之工具提示.pdf
《积累的VC编程小技巧之工具提示.pdf》由会员分享,可在线阅读,更多相关《积累的VC编程小技巧之工具提示.pdf(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学习各种高级外挂制作技术,马上去百度搜索(魔鬼作坊),点击第一个站进入,快速成为做挂达人。1.1.1.1.用鼠标移动基于对话框的无标题栏程序的简单方法用鼠标移动基于对话框的无标题栏程序的简单方法用鼠标移动基于对话框的无标题栏程序的简单方法用鼠标移动基于对话框的无标题栏程序的简单方法void CVCTestDlg:OnLButtonDown(UINT nFlags,CPoint point)/一句话解决问题SendMessage(WM_SYSCOMMAND,0 xF012,0);CDialog:OnLButtonDown(nFlags,point);2.2.2.2.对话框消息映射对话框消息映射对
2、话框消息映射对话框消息映射有对话框 A,B从 A 中发消息给 B 然后 B 处理。准备工作,先定义消息,如下#define WM_B_NOTIFY WM_USER+300首先,必须将 B 的对话框句柄传送给 A,暂时叫 m_hWndB;在 A 的发送消息的地方这样写::SendMessage(m_hWndB,WM_B_NOTIFY,TRUE,NULL);这样 A 中的处理就完了,下面说 B 中的首先定义消息处理函数,如下void B:ModiNotify(WPARAM wParam,LPARAM lParam)MessageBox(小样,我就不信,搞不定你!);然后加消息隐射,如下:BEGIN
3、_MESSAGE_MAP(CB,CDialog)/AFX_MSG_MAP(CRPServerDlg)ON_MESSAGE(WM_B_NOTIFY,ModiNotify)/AFX_MSG_MAPEND_MESSAGE_MAP()3.3.3.3.如何改变框对话或窗体视窗的背景颜色如何改变框对话或窗体视窗的背景颜色如何改变框对话或窗体视窗的背景颜色如何改变框对话或窗体视窗的背景颜色调用 CWinApp:SetDialogBkColor 可以改变所有应用程序的背景颜色。第一个参数指定了背景颜色,第二个参数指定了文本颜色。下例将应用程序对话设置为蓝色背景和黄色文本。BOOL CSampleApp:Ini
4、tInstance()/use blue dialog with yellow text.SetDialogBkColor(RGB(0,0,255),RGB(255,255,0);需要重画对话(或对话的子控件)时,Windows 向对话发送消息 WM_CTLCOLOR,通常用户可以让 Windows 选择绘画背景的刷子,也可重置该消息指定刷子。下例说明了创建一个红色背景对话的步骤。首先,给对话基类增加一人成员变量 CBursh:class CMyFormView:public CFormViewprivate:CBrush m_ brush;/background brush;其次,在类的构造
5、函数中将刷子初始化为所需要的背景颜色。CMyFormView:CMyFormView()/Initialize background brush.m_brush.CreateSolidBrush(RGB(0,0,255)最后,使用 ClassWizard 处理 WM_CTLCOLOR 消息并返回一个用来绘画对话背景的刷子句柄。注意:由于当重画对话控件时也要调用该函数,所以要检测 nCtlColor 参量。HBRUSH CMyFormView:OnCtlColor(CDC*pDC,CWnd*pWnd,UINT nCtlColor)/Determine if drawing a dialog bo
6、x.If we are,return+handle to/our own background brush.Otherwise let windows handle it.if(nCtlColor=CTLCOLOR _ DLG)return(HBRUSH)m_brush.GetSafeHandle();return CFormView:OnCtlColor(pDC,pWnd,nCtlColor);4.4.4.4.如何实现点一下对话框外面的区域如何实现点一下对话框外面的区域如何实现点一下对话框外面的区域如何实现点一下对话框外面的区域,自动隐藏对话框自动隐藏对话框自动隐藏对话框自动隐藏对话框?问题
7、提出如果想在点击对话框外面的地方使得对话框关闭,该如何做?解决方法试试下面的代码,原理是在激活对话框时,捕获鼠标的动作,当鼠标点击时判断是否点击在对话框外,是的话就释放对话框.程序实现建立名为 My 的对话框程序.实现如下步骤:在 MyDlg.h 中加入:class CShowWindow1Dlg:public CDialog/Constructionpublic:int m_cx;int m_cy;.;在 MyDlg.cpp 中:/定义消息映象,处理鼠标单击及激活BEGIN_MESSAGE_MAP(CMyDlg,CDialog)/AFX_MSG_MAP(CMyDlg)ON_WM_LBUTTO
8、NDOWN()ON_WM_ACTIVATE()/AFX_MSG_MAPEND_MESSAGE_MAP()void CMyDlg:OnLButtonDown(UINT nFlags,CPoint point)CRect rect;GetClientRect(&rect);rect.InflateRect(m_cx,m_cy);/Release dialog if the user click outside it.if(!rect.PtInRect(point)EndDialog(IDCANCEL);CDialog:OnLButtonDown(nFlags,point);void CMyDlg:
9、OnActivate(UINT nState,CWnd*pWndOther,BOOL bMinimized)CDialog:OnActivate(nState,pWndOther,bMinimized);if(nState=WA_ACTIVE|nState=WA_CLICKACTIVE)SetCapture();elseReleaseCapture();BOOL CMyDlg:OnInitDialog()CDialog:OnInitDialog();.OSVERSIONINFO info;memset(char*)&info,0,sizeof(OSVERSIONINFO);info.dwOSV
10、ersionInfoSize=sizeof(OSVERSIONINFO);if(GetVersionEx(&info)/we dont run on Win32s,so check only two valuesif(info.dwPlatformId=VER_PLATFORM_WIN32_WINDOWS)/On windows 95m_cx=GetSystemMetrics(SM_CXFIXEDFRAME);m_cy=GetSystemMetrics(SM_CYFIXEDFRAME);else/On NTm_cx=GetSystemMetrics(SM_CXDLGFRAME);m_cy=Ge
11、tSystemMetrics(SM_CYDLGFRAME);说明:1)WM_ACTIVATE 消息在 ClassWizard 中没有,按如下步骤添加,右击 CMyDlg 类,选 AddWindows Message Handle,接着在 Filter for messages available to 中选 Window,在 NewWindows messages/events 列表中就会出现 WM_ACTIVATE,选中,点击 Add Handler2)SM_CXDLGFRAME,SM_CYDLGFRAMENT 中取得有 WS_DLGFRAMEstyle 风格的窗口的高和宽95中已经废弃而采
12、用 SM_CX_FIXEDFRAME 和 SM_CYFIXEDFRAME5.5.5.5.如何使如何使如何使如何使 FormViewFormViewFormViewFormView中显示中显示中显示中显示 dialogdialogdialogdialog时时时时,不是凹的不是凹的不是凹的不是凹的问题提出为什么 FormView 中显示 dialog 时,是凹的,能不能不这样解决方法在 Dialog 的属性中:增加属性 WS_BORDER或者 WS_EX_WINDOWEDGE用程序实现:pView-ModifyStyle(,WS_BORDER)或者 pView-ModifyStyleEx(,WS_
13、EX_WINDOWEDGE)6.6.6.6.对话框上建立对话框上建立对话框上建立对话框上建立 ViewViewViewView的方法的方法的方法的方法OnInitDialog()CDialog:;OnInitDialog();CRect rectWindows;GetWinodwRect(&rectWindows);CRuntimeClass*pViewClass=RUNTIME_CLASS(CXXXView);CCreateContext*pContext=new CCreateContext;pContext-m_pCurrentDoc=NULL;pContext-m_pCurrentFr
14、ame=NULL;pContext-m_pLastView=NULL;pContext-m_pNewDocTemplate=NULL;pContext-m_pNewViewClass=pViewClass;CWnd*pWnd=DYNAMIC_DOWNCAST(CWnd,pviewClass-CreateObject();pWnd-Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CRect(0,0,0,0),this,pContext);delete pContext;CXXXView*pView=DYUNAMIC_DOWNCAST(CXXXView,pWnd);.7.
15、7.7.7.模态对话框初始显示位置的控制模态对话框初始显示位置的控制模态对话框初始显示位置的控制模态对话框初始显示位置的控制正确的方法是在 OnInitDialog 中添加 MoveWindow,如:MoveWindow(0,1,300,200);需要注意的是前两个参数不能都为0。如果你确实希望把窗口放在(0,0)处,可以在对话框设计窗口的属性中选中 Absolute Align,然后再加入MoveWindow(0,0,300,200);为什么会是这样?你看了 MFC 的源程序就会明白。原来 MFC 在调用你的 OnInitDialog之后,会调用 CDialog:CheckAutoCente
16、r()(在 dlgcore.cpp 中)检查是否需要将窗口居中,你看了这个函数后就明白为什么需要上面那么做了。8.8.8.8.动态修改对话框的大小动态修改对话框的大小动态修改对话框的大小动态修改对话框的大小问题提出关于如何动态改变对话框的大小,我做了个 Demo,大家看看.程序实现/本函数使用方法:/第一个参数:如果是 TRUE 表示显示扩展的对话框,如果是 FALSEFALSE,表示缩小对话框。/第二个参数:表示本对话框的 HWND,/第三个参数:表示缩小后大小的控件的 IDvoid COptionDlg:ExpandBox(BOOL fExpand,HWND hwnd,int nIDDef
17、aultBox)CWnd*pWndBox=GetDlgItem(nIDDefaultBox);RECT rcDefaultBox,rcChild,rcIntersection,rcWnd;pWndBox-GetWindowRect(&rcDefaultBox);HWND hwndChild=:GetTopWindow(hwnd);for(;hwndChild!=NULL;hwndChild=:GetNextWindow(hwndChild,GW_HWNDNEXT):GetWindowRect(hwndChild,&rcChild);if(!IntersectRect(&rcIntersecti
18、on,&rcChild,&rcDefaultBox):EnableWindow(hwndChild,fExpand);:GetWindowRect(hwnd,&rcWnd);if(GetWindowLong(hwnd,GWL_USERDATA)=0)SetWindowLong(hwnd,GWL_USERDATA,MAKELONG(rcWnd.right-rcWnd.left,rcWnd.bottom-rcWnd.top);:ShowWindowShowWindow(pWndBox-m_hWnd,SW_HIDE);:SetWindowPos(hwnd,NULL,0,0,rcDefaultBox.
19、right-rcWnd.left,rcDefaultBox.bottom-rcWnd.top,SWP_NOZORDER|SWP_NOMOVE);if(fExpand)DWORD dwDims=GetWindowLong(hwnd,GWL_USERDATA);:SetWindowPos(hwnd,NULL,0,0,LOWORD(dwDims),HIWORD(dwDims),SWP_NOZORDER|SWP_NOMOVE);:SendMessage(hwnd,DM_REPOSITION,0,0);9.9.9.9.隐藏对话框窗口(窗口没有焦点时)隐藏对话框窗口(窗口没有焦点时)隐藏对话框窗口(窗口没
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 积累 VC 编程 技巧 工具 提示
限制150内