资源描述:
《积累的VC编程小技巧之工具提示》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、1.用鼠标移动基于对话框的无标题栏程序的简单方法voidCVCTestDlg::OnLButtonDown(UINTnFlags,CPointpoint){//一句话解决问题SendMessage(WM_SYSCOMMAND,0xF012,0);CDialog::OnLButtonDown(nFlags,point);}2.对话框消息映射有对话框A,B从A中发消息给B然后B处理。准备工作,先定义消息,如下#defineWM_B_NOTIFYWM_USER+300首先,必须将B的对话框句柄传送给A,暂时叫
2、m_hWndB;在A的发送消息的地方这样写:::SendMessage(m_hWndB,WM_B_NOTIFY,TRUE,NULL);这样A中的处理就完了,下面说B中的首先定义消息处理函数,如下voidB::ModiNotify(WPARAMwParam,LPARAMlParam){MessageBox("小样,我就不信,搞不定你!");}然后加消息隐射,如下:BEGIN_MESSAGE_MAP(CB,CDialog)//{{AFX_MSG_MAP(CRPServerDlg)ON_MESSAGE(WM_
3、B_NOTIFY,ModiNotify)//}}AFX_MSG_MAPEND_MESSAGE_MAP()3.如何改变框对话或窗体视窗的背景颜色调用CWinApp::SetDialogBkColor可以改变所有应用程序的背景颜色。第一个参数指定了背景颜色,第二个参数指定了文本颜色。下例将应用程序对话设置为蓝色背景和黄色文本。BOOLCSampleApp::InitInstance(){…//usebluedialogwithyellowtext.SetDialogBkColor(RGB(0,0,255),
4、RGB(255,255,0));…}需要重画对话(或对话的子控件)时,Windows向对话发送消息WM_CTLCOLOR,通常用户可以让Windows选择绘画背景的刷子,也可重置该消息指定刷子。下例说明了创建一个红色背景对话的步骤。首先,给对话基类增加一人成员变量CBursh:classCMyFormView:publicCFormView{…private:CBrushm_brush;//backgroundbrush…};其次,在类的构造函数中将刷子初始化为所需要的背景颜色。CMyFormView:
5、:CMyFormView(){//Initializebackgroundbrush.m_brush.CreateSolidBrush(RGB(0,0,255))}最后,使用ClassWizard处理WM_CTLCOLOR消息并返回一个用来绘画对话背景的刷子句柄。注意:由于当重画对话控件时也要调用该函数,所以要检测nCtlColor参量。HBRUSHCMyFormView::OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor){//Determineifdrawinga
6、dialogbox.Ifweare,return+handleto//ourownbackgroundbrush.Otherwiseletwindowshandleit.if(nCtlColor==CTLCOLOR_DLG)return(HBRUSH)m_brush.GetSafeHandle();returnCFormView::OnCtlColor(pDC,pWnd,nCtlColor);}4.如何实现点一下对话框外面的区域,自动隐藏对话框?[问题提出]如果想在点击对话框外面的地方使得对话框关闭,该
7、如何做?[解决方法]试试下面的代码,原理是在激活对话框时,捕获鼠标的动作,当鼠标点击时判断是否点击在对话框外,是的话就释放对话框.[程序实现]建立名为My的对话框程序.实现如下步骤:在MyDlg.h中加入:classCShowWindow1Dlg:publicCDialog{//Constructionpublic:intm_cx;intm_cy;......};在MyDlg.cpp中://定义消息映象,处理鼠标单击及激活BEGIN_MESSAGE_MAP(CMyDlg,CDialog)//{{AFX_
8、MSG_MAP(CMyDlg)ON_WM_LBUTTONDOWN()ON_WM_ACTIVATE()//}}AFX_MSG_MAPEND_MESSAGE_MAP()voidCMyDlg::OnLButtonDown(UINTnFlags,CPointpoint){CRectrect;GetClientRect(&rect);rect.InflateRect(m_cx,m_cy);//Releasedialogiftheuserclickou