当前位置:天才代写 > tutorial > C语言/C++ 教程 > 用C++Builder在Windows开始按钮上画图

用C++Builder在Windows开始按钮上画图

2017-11-06 08:00 星期一 所属: C语言/C++ 教程 浏览:564

熟悉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();
}

5、Form1的Timer1Timer进程代码如下:

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
GetCursorPos(&pt);
StretchBlt(hdcButton, 0, 0, 60, 25, hdcDesktop, pt.x - 30, pt.y - 12, 60, 25, SRCCOPY);
}

7、按F9运行措施。以上措施在C++ Builder 5.0、Windows95/98/NT/2000简体中文版情况下调试通过。

三.措施清单

#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HWND wnd;
HDC hdcButton, hdcDesktop;
TPoint pt;
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
GetCursorPos(&pt);
StretchBlt(hdcButton, 0, 0, 60, 25, hdcDesktop, pt.x - 30, pt.y - 12, 60, 25, SRCCOPY);
}
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;//开始画图
}
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
if (BitBtn1->Tag == 0)
Timer1->Enabled = True;
BitBtn1->Caption = "竣事画图";
BitBtn1->Tag = 1;
else
Close();
}

 

    关键字:

天才代写-代写联系方式