笔下有余

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
问题:以TPageControl为例,程序中需要“鼠标左键双击”关闭某激活页[如腾讯浏览器]。
   因该控件没有定义鼠标双击事件,只有自己为该控件添加消息映射。映射的消息为:
   左键双击(WM_LBUTTONDBLCLK)。本文利用运行时间派生控件的方法实现,较自己
   制作一个单独控件的方法来讲,这个更简单些。
  // ---------单元头文件------------------------------------------------------
  class TPageControlEx : public TPageControl
  { // TPageControl的公有派生类:增加了左键双击消息映射
  protected:
   void __fastcall OnLeftDbClick(TMessage &Msg);
   BEGIN_MESSAGE_MAP
   VCL_MESSAGE_HANDLER(WM_LBUTTONDBLCLK,TMessage,OnLeftDbClick)
   END_MESSAGE_MAP(TPageControl)
  public: // 内联构造:父类构造
   inline __fastcall TPageControlEx(TComponent* Owner):TPageControl(Owner){ };
  };
  // -----------------------------------------------------------------
  class TForm1 : public TForm
  {
  __published:
   void __fastcall FormCreate(TObject *Sender);
  private:
  public:
   __fastcall TForm1(TComponent* Owner);
   TPageControlEx *PageControlEx;
  };
  // --------单元文件---------------------------------------------------------------
  void __fastcall TPageControlEx::OnLeftDbClick(TMessage &Msg) // 派生类消息处理
  {
  AnsiString area=Form1->PageControlEx->ActivePage->Caption;
  ShowMessage("收到左键双击消息\n双击区域:"+area);
  // PageControl接受消息的区域:Tab按钮矩形区,无须再判断了!
  }
  // --------------------------------------------------------------------------------
  void __fastcall TForm1::FormCreate(TObject *Sender)
  {
  PageControlEx = new TPageControlEx(this);
   PageControlEx->Parent=Form1;
   PageControlEx->Align=alClient;
  // -------------生[url=file://--------生/][/url]成2个TabSheet实验一下------------------------
  TTabSheet* newTabSheet = NULL;
  newTabSheet = new TTabSheet(this);
   newTabSheet->PageControl=PageControlEx;
   newTabSheet->Caption="TabSheet1";
  newTabSheet = new TTabSheet(this);
   newTabSheet->PageControl=PageControlEx;
   newTabSheet->Caption="TabSheet2";
  }
posted on 2010-03-04 10:34  笔下有余  阅读(727)  评论(0编辑  收藏  举报