Visual C++编程技巧之四.docx
上传人:qw****27 上传时间:2024-09-12 格式:DOCX 页数:13 大小:22KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

Visual C++编程技巧之四.docx

VisualC++编程技巧之四.docx

预览

免费试读已结束,剩余 3 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

VisualC++编程技巧之四25、如何获取有关窗口正在处理的当前消息的信息调用CWnd::GetCurrentMessage可以获取一个MSG指针。例如,可以使用ClassWizard将几个菜单项处理程序映射到一个函数中,然后调用GetCurrentMessage来确定所选中的菜单项。viodCMainFrame::OnCommmonMenuHandler(){//Displayselectedmenuitemindebugwindow.TRACE("Menuitem%uwasselected.\n",GetCruuentMessage()—>wParam);}26、如何创建一个不规则形状的窗口可以使用新的SDK函数SetWindowRgn。该函数将绘画和鼠标消息限定在窗口的一个指定的区域,实际上使窗口成为指定的不规则形状。使用AppWizard创建一个基于对的应用程序并使用资源编辑器从主对话资源中删除所在的缺省控件、标题以及边界。给对话类增加一个CRgn数据成员,以后要使用该数据成员建立窗口区域。ClassCRoundDlg:publicCDialog{…private:Crgnm_rgn://windowregion…};修改OnInitDialog函数建立一个椭圆区域并调用SetWindowRgn将该区域分配给窗口:BOOLCRoundDlg::OnInitDialog(){CDialog::OnInitDialog();//Getsizeofdialog.CRectrcDialog;GetClientRect(rcDialog);//Createregionandassigntowindow.m_rgn.CreateEllipticRgn(0,0,rcDialog.Width(),rcDialog.Height());SetWindowRgn(GetSafeHwnd(),(HRGN)m_rgn,TRUE);returnTRUE;}通过建立区域和调用SetWindowRgn,已经建立一个不规则形状的窗口,下面的例子程序是修改OnPaint函数使窗口形状看起来象一个球形体。voikCRoundDlg::OnPaint(){CPaintDCde(this);//devicecontextforpainting.//drawellipsewithoutanyborderdc.SelecStockObject(NULL_PEN);//gettheRGBcolourcomponentsofthespherecolorCOLORREFcolor=RGB(0,0,255);BYTEbyRed=GetRValue(color);BYTEbyGreen=GetGValue(color);BYTEbyBlue=GetBValue(color);//getthesizeoftheviewwindowCrectrect;GetClientRect(rect);//getminimunnumberofunitsintnUnits=min(rect.right,rect.bottom);//calculatehehoriaontalandverticalstepsizefloatfltStepHorz=(float)rect.right/nUnits;floatfltStepVert=(float)rect.bottom/nUnits;intnEllipse=nUnits/3;//calculatehowmanytodrawintnIndex;//currentellipsethatisbeingdrawCBrushbrush;//burshusedforellipsefillcolorCBrush*pBrushOld;//previousbrushthatwasselectedintodc//drawellipse,graduallymovingtowardsupper-rightcornerfor(nIndex=0;nIndes<+nEllipse;nIndes++){//creatsolidbrushbrush.CreatSolidBrush(RGB(((nIndex*byRed)/nEllipse).((nIndex*byGreen)/nEllipse),((nIndex*byBlue)/nEllipse)));//selectbrushintodcpBrushOld=dc.SelectObject(&brhsh);//drawellipsedc.Ellipse((int)fltStepHorz*2,