Font->Color = clBlack; Canvas->Font->S" />
龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

如何自定义提示窗口(Hint Window)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
// 自定义 THintWindow 类 class TCcrunHintWindow : public THintWindow { bool FActivating; __fastcall TCcrunHintWindow(TComponent* Owner) : THintWindow(Owner) { Canvas->Font->Name = "宋体"; Canvas->Font->Color = clBlack; Canvas->Font->S

  // 自定义 THintWindow 类

  class TCcrunHintWindow : public THintWindow

  {

   bool FActivating;

   __fastcall TCcrunHintWindow(TComponent* Owner)

   : THintWindow(Owner)

   {

   Canvas->Font->Name = "宋体";

   Canvas->Font->Color = clBlack;

   Canvas->Font->Size = 9;

   }

   void __fastcall Paint(void)

   {

   TRect rect = ClientRect;

   // Hint边框颜色

   Canvas->Brush->Color = TColor(0xDBB8BA);

   Canvas->FillRect(rect);

   // 绘制整个Hint的边框

   Canvas->Pen->Color = TColor(0x69230E);

   Canvas->Rectangle(rect);

   // Hint背景的颜色

   Color = clWhite;

   // Hint文字透明

   Canvas->Brush->Style = bsClear;

   // 绘出Hint文字

   Canvas->Font->Color = clBlack;

   Canvas->TextOut(4, int(rect.Bottom / 2)

   - int(Canvas->TextHeight(Caption) / 2), Caption);

   }

   virtual void __fastcall NCPaint(HDC hdc)

   {

   // 63 63 72 75 6E 2E 63 6F 6D

   Invalidate();

   }

   virtual void __fastcall CreateParams(TCreateParams &Params)

   {

   // 去掉Hint窗口的边框

   Params.Style = Params.Style & ~WS_BORDER;

   THintWindow::CreateParams(Params);

   }

   // Code by ccrun(老妖),做人要厚道,转载请留名

   virtual void __fastcall ActivateHint(const TRect &Rect, const String AHint)

   {

   FActivating = true;

   try

   {

   Caption = AHint;

   TRect r = Rect;

   r.Left -= 10;

   r.Right += 10;

   r.Top -= 5;

   r.Bottom += 5;

  

   // 更新区域

   UpdateBoundsRect(r);

   // Hint窗口处于屏幕边缘时的调整

   if(r.Top + Height > Screen->DesktopHeight)

   r.Top = Screen->DesktopHeight - Height;

   if(r.Left + Width > Screen->DesktopWidth)

   r.Left = Screen->DesktopWidth - Width;

   if(r.Left < Screen->DesktopLeft)

   r.Left = Screen->DesktopLeft;

   if(r.Bottom < Screen->DesktopTop)

   r.Bottom = Screen->DesktopTop;

   // 创建一个矩形

   // 63 63 72 75 6E 2E 63 6F 6D

   HRGN hrgn = CreateRectRgn(0, 0, r.Width(), r.Height());

   // HRGN hrgn = CreateRoundRectRgn(0, 0, r.Width(), r.Height(), 4, 4);

   // 设置指定句柄的窗口外形

   SetWindowRgn(Handle, hrgn, true);

   // 改变窗口的位置,Z Order,及其他一些属性

   SetWindowPos(Handle, HWND_TOPMOST, r.Left, r.Top, r.Width(),

   r.Height(), SWP_SHOWWINDOW SWP_NOACTIVATE);

   // 重画窗口

   Invalidate();

   }

   __finally

   {

   FActivating = false;

   }

   }

  };

  //---------------------------------------------------------------------------

  // 实现代码

  __fastcall TForm1::TForm1(TComponent* Owner)

   : TForm(Owner)

  {

   HintWindowClass = __classid(TCcrunHintWindow);

   //

   ShowHint = true;

   Button1->Hint = "这是一个按钮";

   Edit1->Hint = "这是一个文本框";

  }

  

  

精彩图集

赞助商链接