请问MFC对话框如何重绘?

竖子未成名 2015-09-17 08:42:16
例如

我想用MFC写有一个能够完成上述构想的程序。现在主要是界面问题不知道怎么解决。
请问各位大神,我有几个问题:
1.我想隐藏程序边框,请问该怎么实现?(假设是MFC对话框类)
2.我想在程序顶部显示一个梯形的图片,图片上有按钮和文本。比如:

我知道不可能实现的那么细致,只是想描述一下我的构想。意思就是一张图片上有按钮和文本两个控件。
3.我想自定义按钮形状,并且在其上绘制图形(或贴图),请问该如何实现按钮重绘?
...全文
346 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
gz_qmc 2015-09-18
  • 打赏
  • 举报
回复
区域的问题一时间半会跟你讲不清楚 我们可以不从图像建立区域 而是从一系列点建立区域 这样你就可以很快熟悉掌握整个架构 熟悉了原理之后 你再单独解决从图像建立区域就不再是难题了 你上传材料,就是你的图片等,我有时间给你做个样板
gz_qmc 2015-09-18
  • 打赏
  • 举报
回复
void CMyObj:: Create(int x,int y, DWORD ID,CWnd *Parent,CString fname,CString text) { if(Parent==NULL) return; sx=x; sy=y; xID=ID; xParent->m_hwnd; xImage=fname; xText=text; } void CMyObj::Show(CDC *pDC) { //根据xRng区域设置pDC的剪裁区域 //将文件xImage显示在sx,sy的地方 } 你的问题在于自己没有耐心一个问题一个问题的分解 分解到最后自己百度就完成了
竖子未成名 2015-09-18
  • 打赏
  • 举报
回复
引用 14 楼 gz_qmc 的回复:
另外一种就是统一用 typedef struct tagMYOBJ { CRgn *xRgn; //指向区域 long sx; //坐标 long sy; //坐标 CString xText; //文本 CString xImage //图片文件名 DWORD xID; sturct tagMYOBJ *next; }MYOBJ; 然后统一由对话框建立链表,增加节点,填入数据 MYOBJ Head; 然后在OnPaint里画图 MYOBJ *pCur=Head; while(pCur) { //根据pCur数据画图 pCur=pCur->next; }
引用 13 楼 gz_qmc 的回复:
取消对话框的标题栏,在OnPaint里自己绘图就可以完成你的想法 你的界面可以这样描述,有N个区域,每个区域有各自的文本或者图片,有各自的坐标和包络矩形,每个区域都可以响应鼠标时间 于是 class CMyObj { public: CMyObj(); ~ CMyObj(); public: void Create(int x,int y, DWORD ID,CWnd *Parent,CString fname,CString text); CRgn *RgnFromPictrue(CString imgfile); void Show(CDC *pDC); private: CRgn *xRgn; //指向区域 long sx; //坐标 long sy; //坐标 CString xText; //文本 CString xImage //图片文件名 HWND xParent;//父窗口句柄 DWORD xID; //本身分配ID }; 你网上搜索怎么样从图片建立区域完成RgnFromPictrue(CString imgfile); 基本就没啥难度了 在对话框.H建立你的对象 CMyObj xHelp; 在InitDialog里创建 xHelp.Create(300,100,12345,this,"c:\\a.jpg",""); 在OnPaint里 xHelp.Show(&dc);
可是大神,Create()和Shou()怎么实现啊?
竖子未成名 2015-09-17
  • 打赏
  • 举报
回复
引用 9 楼 zhao4zhong1 的回复:
将你的若干个奇形怪状的按钮的边缘对应的多边形保存在一个Region数组中,然后使用API PtInRegion判断鼠标指针是否落在这些Region中的某一个中。
可是按钮本身的形状还是没有变化的吧?不好意思,我没尝试。我只是觉得,这样实现的话,按钮应该还是矩形,只不过响应按钮的区域变大了而已。
赵4老师 2015-09-17
  • 打赏
  • 举报
回复
将你的若干个奇形怪状的按钮的边缘对应的多边形保存在一个Region数组中,然后使用API PtInRegion判断鼠标指针是否落在这些Region中的某一个中。
竖子未成名 2015-09-17
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
GetCursorPos ScreenToClient PtInRegion
请问这是代表什么啊?我知道第一个是获取光标位置,第二个是屏幕坐标对应的程序坐标,第三个百度了一下是确认点是否在区域内。我不太理解这三个函数与我的提问有什么相关。麻烦解释下。
竖子未成名 2015-09-17
  • 打赏
  • 举报
回复
引用 5 楼 gz_qmc 的回复:
懂数据结构吗?懂自绘吗? 懂就简单,不懂就那儿凉快那儿呆着去
数据结构还行,自绘不懂。不过还有时间,我希望能自己学,请问有哪些是这方面的相关书籍呢?
竖子未成名 2015-09-17
  • 打赏
  • 举报
回复
引用 2 楼 luxiaolai861227 的回复:
难度很大,敢觉你要想实现,控件什么的都要自己从底层重载起来。从CObject上直接重载。没法继承CButton。消息响应什么的你都要自己处理
意思是相当于自己写一个控件了?可是这样的话就没办法利用MFC提供的可视化编程直接拖动控件了啊。那么请问大神,有没有这方面的相关书籍啊?我想自己学一下。
gz_qmc 2015-09-17
  • 打赏
  • 举报
回复
懂数据结构吗?懂自绘吗? 懂就简单,不懂就那儿凉快那儿呆着去
赵4老师 2015-09-17
  • 打赏
  • 举报
回复
GetCursorPos ScreenToClient PtInRegion
worldy 2015-09-17
  • 打赏
  • 举报
回复
使用无边框窗口 找一件破裤子,拍一张照片PS处理一下做一张图作为你的背景 响应鼠标移动点击,在特定位置设想为按键,处理按键及响应按键
处处留心 2015-09-17
  • 打赏
  • 举报
回复
难度很大,敢觉你要想实现,控件什么的都要自己从底层重载起来。从CObject上直接重载。没法继承CButton。消息响应什么的你都要自己处理
竖子未成名 2015-09-17
  • 打赏
  • 举报
回复
呃,顺便补充一下,第二点中的图片我希望能做成梯形的形状(如图中的图形边缘),请问各位大神这些应该怎么做?谢谢回答,谢谢。
gz_qmc 2015-09-17
  • 打赏
  • 举报
回复
当对话框有鼠标消息时候 非别把坐标点传进各目标对象或链表进行检查 并通知对话框重新绘图
gz_qmc 2015-09-17
  • 打赏
  • 举报
回复
另外一种就是统一用 typedef struct tagMYOBJ { CRgn *xRgn; //指向区域 long sx; //坐标 long sy; //坐标 CString xText; //文本 CString xImage //图片文件名 DWORD xID; sturct tagMYOBJ *next; }MYOBJ; 然后统一由对话框建立链表,增加节点,填入数据 MYOBJ Head; 然后在OnPaint里画图 MYOBJ *pCur=Head; while(pCur) { //根据pCur数据画图 pCur=pCur->next; }
gz_qmc 2015-09-17
  • 打赏
  • 举报
回复
取消对话框的标题栏,在OnPaint里自己绘图就可以完成你的想法 你的界面可以这样描述,有N个区域,每个区域有各自的文本或者图片,有各自的坐标和包络矩形,每个区域都可以响应鼠标时间 于是 class CMyObj { public: CMyObj(); ~ CMyObj(); public: void Create(int x,int y, DWORD ID,CWnd *Parent,CString fname,CString text); CRgn *RgnFromPictrue(CString imgfile); void Show(CDC *pDC); private: CRgn *xRgn; //指向区域 long sx; //坐标 long sy; //坐标 CString xText; //文本 CString xImage //图片文件名 HWND xParent;//父窗口句柄 DWORD xID; //本身分配ID }; 你网上搜索怎么样从图片建立区域完成RgnFromPictrue(CString imgfile); 基本就没啥难度了 在对话框.H建立你的对象 CMyObj xHelp; 在InitDialog里创建 xHelp.Create(300,100,12345,this,"c:\\a.jpg",""); 在OnPaint里 xHelp.Show(&dc);
竖子未成名 2015-09-17
  • 打赏
  • 举报
回复
引用 11 楼 zhao4zhong1 的回复:
搜“非矩形按钮”
谢谢。
赵4老师 2015-09-17
  • 打赏
  • 举报
回复
搜“非矩形按钮”

15,979

社区成员

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

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