当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++ Builder教程

C++Builder在Windows“开始”按钮上绘图

熟悉Windows操作系统的软件设计人员知道,在Win95/98/NT/2000中有一任务栏(Task Bar)程序,路径为:C:\WINDOWS\SYSTEM\SYSTRAY.EXE(假设你的Windows安装在系统默认路径C:\WINDOWS)。从系统功能角度分析,任务栏由几个不同的子区域组成,从左至右依次是:开始(Start)按钮、应用程序切换区(Application Switch Bar)、任务栏通知区(Notification Area)以及任务栏时钟。从程序编制角度分析,任务栏程序(SYSTRAY.EXE)与其它Windows应用程序相同,由几个不同的窗体组成,这些窗体具有各自窗口类名、句柄、显示方式等信息。
 
  一。要点说明
 
  1、任务栏、开始按钮的窗口信息:
 
  ◆Tray Bar的窗口类名:Shell_TrayWnd
 
  ◆开始按钮的窗口类名:Button
 
  2、调用FindWindow函数获得任务栏窗口句柄。
 
  3、调用FindWindowEx函数获得开始按钮窗口句柄。
 
  4、调用GetDC函数获得开始按钮设备和桌面窗口上下文关系。
 
  5、调用GetDeskTopWindow桌面窗口句柄。
 
  6、调用GetCursorPos函数获得当前鼠标位置。
 
  7、调用StretchBlt函数将鼠标背景绘制在开始按钮上
 
  8、调用ReleaseDC释放开始按钮和桌面窗口上下文关系
 
  二。实例
 
  1、在C++ Builder 5.0 IDE 中新建工程Project1,Project1中包含Form1,窗体如下图所示:
 
  2、定义变量
 
 HWND wnd;
HDC hdcButton, hdcDesktop;
TPoint pt;

  3、Form1的FormCreate 过程代码如下
 
 void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->MessageBox("利用C++Builder在Windows开始按钮上绘图演示程序", "特别说明", MB_OK + MB_DEFBUTTON1);
wnd = FindWindow("Shell_TrayWnd", NULL);
wnd = FindWindowEx(wnd, 0, "Button", NULL);
hdcButton = GetDC(wnd);
wnd = GetDesktopWindow();
hdcDesktop = GetDC(wnd);
Timer1->Enabled = False;
Timer1->Interval = 1;
BitBtn1->Tag = 0;//开始绘图
}

  4、Form1的BitBtn1Click过程代码如下:
 
 void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
if (BitBtn1->Tag == 0)
Timer1->Enabled = True;
BitBtn1->Caption = "结束绘图";
BitBtn1->Tag = 1;
}
else
Close();
}

 

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接