当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

<b>用C++Builder在Windows开始按钮上画图</b>[VC/C++编程]

赞助商链接



  本文“<b>用C++Builder在Windows开始按钮上画图</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

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


  以上是“<b>用C++Builder在Windows开始按钮上画图</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .