自画Caption标题栏
来源:互联网 发布:淘宝卖衣服从哪里进货 编辑:程序博客网 时间:2024/06/06 07:15
要实现自己绘制窗口的标题栏,必须拦截两个消息 WM_NCPAINT 和 WM_NCACTIVATE。我在
这里给出部分关键的 C++ Builder 代码,其实用 Delphi 实现也是很容易的。
class TForm1 : public TForm
{
// 窗体类声明细节省略
private:
void __fastcall WMNCPaint(TMessage &Msg);
void __fastcall WMNCActivate(TWMNCActivate &Msg);
protected:
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_NCPAINT, TMessage, WMNCPaint)
VCL_MESSAGE_HANDLER(WM_NCACTIVATE, TWMNCActivate, WMNCActivate)
END_MESSAGE_MAP(TForm)
};
void __fastcall TForm1::WMNCActivate(TWMNCActivate &Msg)
{
Msg.Result = true;
if(!Msg.Active)
{
DefWindowProc(this->Handle, Msg.Msg, Msg.active, 0);
return;
}
TMessage pm;
pm.Msg = Msg.Msg;
pm.WParam = Msg.Active;
WMNCPaint(pm);
}
void __fastcall TForm1::WMNCPaint(TMessage &Msg)
{
HDC hdc;
TRect cr;
TCanvas *wc = NULL;
DefWindowProc(this->Handle, Msg.Msg, Msg.WParam, Msg.LParam);
hdc = GetWindowDC(this->Handle);
try
{
wc = new TCanvas;
wc->Handle = hdc;
// 计算标题栏尺寸
cr.Left = GetSystemMetrics(SM_CXFRAME);
cr.Top = GetSystemMetrics(SM_CYFRAME);
cr.Right = this->Width - 4 * GetSystemMetrics(SM_CXSIZE);
cr.Bottom = cr.Top + GetSystemMetrics(SM_CYCAPTION) - 1;
// 获取标题栏的 Rect 后就可以直接在 wc 画布上画了,直接在标题栏上出效果!
// 绘画代码省略
// ... ...
}
__finally
{
ReleaseDC(this->Handle, hdc);
if(wc != NULL)
{
delete wc;
wc = NULL;
}
}
}
// 就这么简单
- 自画Caption标题栏
- caption
- 自画标题栏的一个例子
- DevExpress RibbonForm的标题栏(Title Caption)中文显示不全
- DevExpress RibbonForm的标题栏(Title Caption)中文显示不全
- 自绘对话框标题栏
- 自绘对话框标题栏
- 自绘对话框标题栏
- 自绘对话框标题栏
- 自绘对话框标题栏
- 自加顶部标题栏
- uilib 自绘 标题栏
- 隐藏自带标题栏
- Android去掉自带标题栏
- Android 去除自带标题栏
- 自绘无标题栏Frame
- mfc 标题栏设置 自会标题栏,窗体背景等
- MFC:自绘标题栏,DefWindowProc的使用
- ArcGis Engine制作单值图
- 时间类
- Java乔晓松-利用JavaScript实现js对user用户的分页和实现js对用户的增删改查操作
- UVA 10714 - Ants
- 黑马程序员-HTML网页知识
- 自画Caption标题栏
- 数据结构--栈
- C++编程思想--动态创建对象(2)
- 1306
- linux硬链接与软链接 linux asm 文件
- 领域驱动设计之代码优先-架构描述 (翻译)
- Java程序性能优化
- PHP, 不要使用(include/require)_once
- 黑马程序员---java基础之IO(字符流和字节流)