另外一种就是统一用 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; }
取消对话框的标题栏,在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);
将你的若干个奇形怪状的按钮的边缘对应的多边形保存在一个Region数组中,然后使用API PtInRegion判断鼠标指针是否落在这些Region中的某一个中。
GetCursorPos ScreenToClient PtInRegion
懂数据结构吗?懂自绘吗? 懂就简单,不懂就那儿凉快那儿呆着去
难度很大,敢觉你要想实现,控件什么的都要自己从底层重载起来。从CObject上直接重载。没法继承CButton。消息响应什么的你都要自己处理
搜“非矩形按钮”
15,979
社区成员
115,896
社区内容
加载中
试试用AI创作助手写篇文章吧