求个GDI+自绘按钮的例子

zengzhuan7760 2016-11-21 01:23:09
对话框上自绘一个按钮,PNG的,spy++抓不到句柄的,不要继承CBUTTON的,
有鼠标经过变化,离开变化,和点击事件。
请各位大哥给个。
...全文
264 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2016-11-28
  • 打赏
  • 举报
回复
引用 7 楼 zengzhuan7760 的回复:
[quote=引用 5 楼 SXJIAKE 的回复:] 最近也在自己研究类似的简易 DUI。这个例子是自己搞的各种按钮,做得比较简单,还没有完美处理文字的位置等: http://yun.baidu.com/xcloud/csdn/pan/share/link?shareid=421456802&uk=1496687502 完全绘制的按钮,没有句柄。纯 API 实现,没有类,仅供参考。
大神,有空交流下啊有没有联系方式[/quote]我发布的这个版本有些小问题:当鼠标在某个“控件”区域内按下不松开,且光标滑出按下时所在“控件”区域时,如光标又进入其他“控件”区域,其他“控件”不应该产生鼠标经过的效果。后来我用一个全局变量代替,暂时解决了问题,这个有点类似于 SetCapture 的功能,即此时的焦点是在那个按下的控件。
赵4老师 2016-11-24
  • 打赏
  • 举报
回复
Codejock.Xtreme.Toolkit.Pro.v15.3.1.Full.Source.Retail.Incl.Keymaker-ZWT.rar ?
「已注销」 2016-11-24
  • 打赏
  • 举报
回复
CSDN 私信
zengzhuan7760 2016-11-24
  • 打赏
  • 举报
回复
引用 5 楼 SXJIAKE 的回复:
最近也在自己研究类似的简易 DUI。这个例子是自己搞的各种按钮,做得比较简单,还没有完美处理文字的位置等: http://yun.baidu.com/xcloud/csdn/pan/share/link?shareid=421456802&uk=1496687502 完全绘制的按钮,没有句柄。纯 API 实现,没有类,仅供参考。
大神,有空交流下啊有没有联系方式
「已注销」 2016-11-24
  • 打赏
  • 举报
回复
这个例子用的是系统的按钮图片,即 DrawThemeBackground,并没有用到 gdiplus,你可以自己改改加载其它图片。
「已注销」 2016-11-23
  • 打赏
  • 举报
回复
最近也在自己研究类似的简易 DUI。这个例子是自己搞的各种按钮,做得比较简单,还没有完美处理文字的位置等: http://yun.baidu.com/xcloud/csdn/pan/share/link?shareid=421456802&uk=1496687502 完全绘制的按钮,没有句柄。纯 API 实现,没有类,仅供参考。
阿源是少年 2016-11-22
  • 打赏
  • 举报
回复
引用 2 楼 schlafenhamster 的回复:
"对话框一个按钮" 定义 一个 CRect。 对话框 hittest ,检查 鼠标是不是 在 CRect 内。
完美
schlafenhamster 2016-11-21
  • 打赏
  • 举报
回复
如 class CMyPicture : public CStatic // CRect m_rcTitle; CRect m_rcLongText; CRect m_rcClient; CRect m_rcHSKey[8]; CRect m_rcVSKey[8]; 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 CMyPicture::CMyPicture() { m_rcWorkArea=CRect(0,0,48,32);//fixed size 48,32 //mode size MDA,AUTO,JOG m_rcMachineMode=CRect(48,0,98,32);;//fixed size 98,32 // dlg size m_rcDefDlg=CRect(0,0+32,560,396+32); m_rcDialog.m_rect=m_rcDefDlg; m_enbleDlg=FALSE; // dlg ID and attrib m_DlgID="MASKx"; m_DlgAttrib="CM0,CB0"; // all rects m_rcTitle=CRect(2,32,260,54); m_rcLongText=CRect(260,32,558,54); m_rcClient=CRect(0,55,560,428); int jj; // hsk m_rcHSKey[0]=CRect(1,447,81,479); for (jj=1;jj<8;jj++) { m_rcHSKey[jj].left=m_rcHSKey[jj-1].left+m_rcHSKey[0].Width(); m_rcHSKey[jj].top=m_rcHSKey[jj-1].top; m_rcHSKey[jj].right=m_rcHSKey[jj-1].right+m_rcHSKey[0].Width(); m_rcHSKey[jj].bottom=m_rcHSKey[jj-1].bottom; } // m_rcVSKey[0]=CRect(562,34,638,68); for (jj=1;jj<8;jj++) { m_rcVSKey[jj].left=m_rcVSKey[jj-1].left; if((jj %2)==1) m_rcVSKey[jj].top=m_rcVSKey[jj-1].top+m_rcVSKey[0].Height()+19; else m_rcVSKey[jj].top=m_rcVSKey[jj-1].top+m_rcVSKey[0].Height()+18; m_rcVSKey[jj].right=m_rcVSKey[jj-1].right; if((jj %2)==1) m_rcVSKey[jj].bottom=m_rcVSKey[jj-1].bottom+m_rcVSKey[0].Height()+19; else m_rcVSKey[jj].bottom=m_rcVSKey[jj-1].bottom+m_rcVSKey[0].Height()+18; } // m_TT_text.Add("change work area");//0 m_TT_text.Add("change mode"); m_TT_text.Add("Title"); m_TT_text.Add("Long text"); m_TT_text.Add("Client"); m_TT_text.Add("HSK1"); m_TT_text.Add("HSK2"); m_TT_text.Add("HSK3"); m_TT_text.Add("HSK4"); m_TT_text.Add("HSK5"); m_TT_text.Add("HSK6"); m_TT_text.Add("HSK7"); m_TT_text.Add("HSK8"); // m_TT_text.Add("VSK1"); m_TT_text.Add("VSK2"); m_TT_text.Add("VSK3"); m_TT_text.Add("VSK4"); m_TT_text.Add("VSK5"); m_TT_text.Add("VSK6"); m_TT_text.Add("VSK7"); m_TT_text.Add("VSK8");//19 // m_AllText.Add("");//0 m_AllText.Add("");//1 m_AllText.Add("New Title"); m_AllText.Add("Long text"); m_AllText.Add("Client");// m_AllText.Add("New Fun\r\nTest");// m_AllText.Add("");// m_AllText.Add("");// m_AllText.Add("");// m_AllText.Add("");// m_AllText.Add("");// m_AllText.Add("");// m_AllText.Add("");// // m_AllText.Add("");//12 m_AllText.Add("");// m_AllText.Add("");// m_AllText.Add("");// m_AllText.Add("");// m_AllText.Add("");// m_AllText.Add("");//18 m_AllText.Add("");//19 // m_StartTrack=FALSE; // m_uEleHit=0; // m_skPress.SetSize(18);//0,1 not used // Create 2 bmps m_bmArea[0]=(HBITMAP)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_CUSTOM), IMAGE_BITMAP, 0,0,// default 0);// m_bmArea[1]=(HBITMAP)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_PROGRAM), IMAGE_BITMAP, 0,0,// default 0);// // m_EditHit=0; // add m_bmMode } UINT CMyPicture::HitTest(CPoint pt) { if(m_rcWorkArea.PtInRect(pt)) {// afxDump << "in workarea\n"; return HT_WORKAREA; } if(m_rcMachineMode.PtInRect(pt)) {// afxDump << "in mode\n"; return HT_MODE; } if(m_rcTitle.PtInRect(pt)) {// afxDump << "in Title\n"; return HT_TITLE; } if(m_rcLongText.PtInRect(pt)) {// afxDump << "in long text\n"; return HT_LONGTEXT; } if(m_rcClient.PtInRect(pt)) {// afxDump << "in client\n"; return HT_CLIENT; } int jj; for (jj=0;jj<8;jj++) { if(m_rcHSKey[jj].PtInRect(pt)) {// afxDump << "in HS" << jj+1 << "\n"; return jj+HT_HSK1; } } for (jj=0;jj<8;jj++) { if(m_rcVSKey[jj].PtInRect(pt)) {// afxDump << "in VS" << jj+1 << "\n"; return jj+HT_VSK1; } } // afxDump << pt << "\n" ; return HT_NOWHERE; }
schlafenhamster 2016-11-21
  • 打赏
  • 举报
回复
"对话框一个按钮" 定义 一个 CRect。 对话框 hittest ,检查 鼠标是不是 在 CRect 内。
三岁、就很帅 2016-11-21
  • 打赏
  • 举报
回复
那个你为何要搞的这么麻烦列 有现成的可以拿来用的 你这种方法就要自己写 判断鼠标在区域内,主对话框的OnMouseMove里面加入判断当前点是否移动到你按钮区域内,然后自己添加相应的加载图片代码,其他的按下跟失去焦点的差不多

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧