小弟因为项目要求,需要实现一个自己的CButton类,这个类要求实现类似任意形状的不规则窗体那样的不规则按钮形状,
我尝试过用实现不规则窗体的方法,SetWindowRgn这样的方式去实现,并且从载了 PreSubClassWindow
,再 PreSubClassWindow 中,实现了类似创建不规则窗体的那种实现代码,但是并没有效果,请教高手,不规则按钮应该怎么实现?
我尝试过用实现不规则窗体的方法,SetWindowRgn这样的方式去实现,并且从载了 PreSubClassWindow
,再 PreSubClassWindow 中,实现了类似创建不规则窗体的那种实现代码,但是并没有效果,请教高手,不规则按钮应该怎么实现?
解决方案 »
- 如何对exe,dll等文件的签名进行验证?
- 最近机器老是莫名其妙自动弹出一个IE广告窗口,想编程序查一下这个广告窗口是由哪个进程弹出的,有办法查吗?
- Effective C++第一条“尽量以Const和InLine取代#define”在实际工作中并不是那么好用
- C/C++@@@普度众生@@@开坛讲经no_3
- 请问想知道在Windows下编程的消息原理和内幕,有什么书可看?
- 建模题目:欢迎高手!大家进来讨论吧!
- 关于临时对象的问题
- 设备环境(device contexts)和位图bitmap是什么
- 怎么设置,默认的按钮
- 请问用加密算法对字符串加密?
- 很有用的问题,我在DIALOG 上create 一快区域, 象一个没有任何风格的BUTTON 一样~~~~~~~~进来看吧
- 怎样在VC中用键盘按钮来模拟鼠标水平滚轮事件
BOOL .....::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return TRUE;
return CButton::OnEraseBkgnd(pDC);
}
3
void CALUButton::PreSubclassWindow()
{
CButton::PreSubclassWindow();
ModifyStyle(0, BS_OWNERDRAW); CRect rect;
GetClientRect(rect); // Convert client coords to the parents client coords
ClientToScreen(rect);
CWnd* pParent = GetParent();
if (pParent)
pParent->ScreenToClient(rect); // Resize the window
MoveWindow(rect.left, rect.top, rect.Width(), rect.Height(), TRUE);}
思路: 一般状态,选中状态,按下状态等。创建区域,填充不同的颜色。以及上面字的偏移。
到底,从载
1 DrawItem
2 OnEraseBkgnd
3 PreSubclassWindow都是有什么用的啊?
具体实现不规则按钮的功能函数,应该在哪一个函数里面调用啊
CRect类得到一个区域,直接画的按钮,不是我所说的那种方式实现的按钮,
这里面有个圆形按钮自绘。
思路我上面提到过的
外观的话可以用贴图的方式。
最好就是自己写一个控件了,要怎么画都可以。
这样的画法,就可以解决任意的不规则的问题,只要能做的出相应的图片就行,
我就是想通过类似这样的方法,去实现不规则按钮,可行不?
不过要事先计算你的区域
划分,组合区域达到你要的区域