网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.我的程序人生路.
.使用 C++ Builder&nbs.
.连接MYSQL数据库的方法及示例.
.用Delphi 实现自定义颜色对话框及.
.制作多样的椭圆.
.监视程序的编制.
.AT&T的汇编格式.
.C++对象布局及多态实现探索之虚继.
.C编写Windows服务程序的五个步骤.
.在C++Builder中显示透明位图.
.VC下显示JPEG、GIF图像的简便方法.
.shell要如何分类呢?.
.怎样编制黑白棋(4).
.用BCB开发多层数据库应用程序.
.判断windows的桌面及其它目录.
.用Socket实现点对点的文件传输.
.C语言入门之分支结构(1).
.Windows的动态链接库原理及使用2.
.C程序设计语言概论(3).
.信号(signal)介绍.

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

发表日期:2008-3-8



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

上一篇:防止一个没有窗体的WINDOWS程序的重复运行 人气:476
下一篇:用CB控制Windows注册表 人气:421
浏览全部C/C++的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐