vc6怎么打开对话框的控件,vc如何添加按钮

中国论文网 发表于2024-04-13 05:18:20 归属于电子论文 本文已影响344 我要投稿 手机版

       今天中国论文网小编为大家分享毕业论文、职称论文、论文查重、论文范文、硕博论文库、论文写作格式等内容.                    

摘 要 本文通过实例介绍了用vc++6.cn⑸ 利用classwizard为最小化按钮关联对应的消息wm_nclbuttondown和消息处理函数onnclbuttondown(uint nhittest, cpoint point)。⑹ 函数drawbutton()用于绘制按钮。由于最小化按钮并不是一个真实的按钮控件,而是一个画在标题栏上的位图。因此,为了在对话框窗体标题上绘画,必须创建一个窗口设备环境类(相当于创建一个画布,有了这个画布,才能在画布上绘画,也就是才能在标题栏上绘画。)① 调用函数getwindowdc()取得指向cdc的指针 cdc* pdc;② 调用函数 createcompatibledc(cdc* pdc)创建一个内存设备环境,以便在内存中保存位图,并与指定的窗口设备环境相兼容;③ 调用函数selectobject(cbitmap *pbitmap),将位图选入内存设备环境中;④ 调用函数 bitblt(int x, int y, int nwidth, int nheight, cdc *psrc, int xsrc, int ysrc, dword dwrop)将位图复制到实际设备环境中。其中,参数x, y 表示位图目标矩形左上角的x, y 逻辑坐标值;nwidth, nheight 表示位图目标矩形的逻辑宽度和高度;psrc 表示源设备环境cdc指针;xsrc, ysrc 表示位图源矩形的左上角的x, y 逻辑坐标值;dwrop 表示显示位图的光栅操作方式。光栅操作方式有多种,这里使用的是srccopy,表示将位图直接复制到目标内存设备环境中。这里要说明一点:函数bitblt()只能“一比一”的显示位图,如要任意缩放显示位图须使用函数stretchblt(),该函数的使用方法,请参考相关书籍。⑤ 位图选入内存环境中显示后,应调用函数selectobject(cbitmap *poldbitmap)恢复原来的内存设备环境。⑺ 提示条实质上是一个小的弹出窗口,在窗口中显示一行文本,用来描述工具(或区域)的用途或其它信息。在mfc中提供了工具提示条控件类ctooltipctrl,由它来管理提示条。在这里,我们从ctooltipctrl类派生子类ctooltips。在子类的定义中添加函数bool addtooltip( uint nid, lprect lprect, lpctstr lpsztext),该函数用于向工具提示条控件注册按钮区域和提示文本,当鼠标在最小化按钮区域时,显示提示文本。

3 主要的程序代码⑴ 在对话框类中定义相应的变量和函数声明class cminbuttondlg : public cdialog{ ………… public: crect m_rtbuttmin; //记录最小化按钮位置 void drawbutton(); //绘制最小化按钮 bool m_bmppressed;//最小化按钮状态标志 crect m_buttmintips;//记录最小化按钮区域protected: ctooltips m_tooltip;//定义工具提示条控件变量 void getminbutrect();//获取最小化按钮所在区域 //消息处理函数afx_msg void onnclbuttondown(uint nhittest, cpoint point); afx_msg void onncpaint(); afx_msg void onactivate(uint nstate, cwnd* pwndother, bool bminimized); afx_msg void onncmousemove(uint nhittest, cpoint point);…………};⑵ 对话框类中三个消息处理函数定义如下://对应消息wm_ncpaint的消息处理函数void cminbuttondlg::onncpaint() { cdialog::onncpaint(); drawbutton(); //绘制最小化按钮 }//对应消息wm_activate的消息处理函数void cminbuttondlg::onactivate(uint nstate, cwnd* pwndother, bool bminimized) { cdialog::onactivate(nstate, pwndother, bminimized); drawbutton(); //绘制最小化按钮 }//对应消息wm_ncmousemove的消息处理函数void cminbuttondlg::onncmousemove(uint nhittest, cpoint point) { drawbutton(); //绘制最小化按 cdialog::onncmousemove(nhittest, point);}⑶ 绘制最小化按钮的函数void cminbuttondlg::drawbutton(){ cdc* pdc = getwindowdc(); cdc* pmemdc=new cdc; cbitmap *pbitmap1=new cbitmap; cbitmap *pbitmap2=new cbitmap; cbitmap *poldbitmap; crect rtwnd, rtbuttons, rttitle; //创建一个内存设备环境 pmemdc->createcompatibledc(pdc); if(!pdc) return; getwindowrect(&rtwnd); //取得标题栏的矩形 = getsystemmetrics(sm_cxframe); = getsystemmetrics(sm_cyframe); = - - getsystemmetrics(sm_cxframe); = + getsystemmetrics(sm_cysize); //计算最小化按钮的位置,位图大小为15x15 =+1; =+15; = -20; = -15;

m_rtbuttmin = rtbuttons; pbitmap1->loadbitmap(idb_bitmap1); //调入正常状态按钮的位图 pbitmap2->loadbitmap(idb_bitmap2); //调入按钮按下状态的位图 rect(t());//记录最小化按钮的位置 //将按钮位图调入内存设备环境中,m_bmppressed为true//调入正常状态按钮的位图 poldbitmap=pmemdc->selectobject(m_bmppressed ? pbitmap1: pbitmap2); //将按钮位图复制到实际的内存设备环境中 pdc->bitblt(, , (), (), pmemdc, 0, 0, srccopy); pmemdc->selectobject(poldbitmap);//恢复原来的内存设备环境//释放资源 releasedc(pmemdc); releasedc(pdc); delete pmemdc; delete pbitmap1; delete pbitmap2; }⑷ 对应鼠标左键的wm_nclbuttondown消息处理函数void cminbuttondlg::onnclbuttondown(uint nhittest, cpoint point) { cdialog::onnclbuttondown(nhittest, point); //检测是否在最小化按钮区域内按下按钮 if (ct(point)) { m_bmppressed=false;//绘制按钮按下时的状态 drawbutton(); //绘制最小化按钮 m_bmppressed=true;//绘制按钮的正常状态 sendmessage(wm_syscommand, sc_minimize, makelparam(point.x, point.y));//发送最小化消息 } }⑸ //在最小化按钮区域实现提示文本bool ctooltips::addtooltip( uint nid, lprect lprect, lpctstr lpsztext ){ toolinfo tips; memset(&tips, 0, sizeof(toolinfo)); = sizeof(toolinfo); = getowner()->getsafehwnd(); = ttf_subclass; = nid; memcpy(&, lprect, sizeof(rect)); xt = (lpstr)lpsztext return (bool)sendmessage(ttm_addtool, 0, (lparam)&tips);}⑹ 在对话框初始化函数oninitdialog()中添下列代码:(this,tts_alwaystip);//创建工具提示控件,tts_alwaystip表示,//不论控件所属窗体是否活动,提示条始终有效 getminbutrect(); screentoclient(&m_buttmintips);//屏幕坐标转换为窗体坐标 ltip(1,&m_buttmintips,"最小化");4 结束语 实例程序的测试环境为windows 98、pⅱ350,效果良好。

  中国论文网(www.lunwen.net.cn)免费学术期刊论文发表,目录,论文查重入口,本科毕业论文怎么写,职称论文范文,论文摘要,论文文献资料,毕业论文格式,论文检测降重服务。

返回电子论文列表
展开剩余(