如何在窗体标题栏上添加一个按钮?

whinformation 2001-07-30 02:25:08
如何在窗体标题栏(蓝色区域上,在最小最大及关闭按钮左边)上添加一个按钮?
...全文
588 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdws222 2002-01-29
  • 打赏
  • 举报
回复
我也想要一个,能发来吗?
zhaosoft@21cn.com
elong518 2001-09-05
  • 打赏
  • 举报
回复
耗子兄,我也想要一个。elong518@sina.com
Spring414 2001-09-05
  • 打赏
  • 举报
回复
谢谢,可否也送我一份?

spring414@8848.net
haoel 2001-08-02
  • 打赏
  • 举报
回复
Delphi中的消息机制用的是message语句。而BCB中的就像VC的一样用的是宏!
我还是喜欢Delphi中的消息映射机制,我不想在这里讲Delphi的消息映射原理,
还请大家去看《delphi人员开发指南》138元的那本书。

另外,juco11@21cn.com,kasuga@263.net,shally5@163.net,dengbcb@263.net 我寄出了。

SSTS 2001-07-31
  • 打赏
  • 举报
回复
//---------------------------------------------------------------------------
#ifndef MAINFORMH
#define MAINFORMH
//---------------------------------------------------------------------------
#include <vcl\Classes.hpp>
#include <vcl\Controls.hpp>
#include <vcl\StdCtrls.hpp>
#include <vcl\Forms.hpp>
#include <vcl\Menus.hpp>
#include <vcl\ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TMainMenu *MainMenu1;
TMenuItem *File1;
TMenuItem *Exit1;
TTimer *Timer1;
void __fastcall Exit1Click(TObject *Sender);
void __fastcall Timer1Timer(TObject *Sender);
void __fastcall FormResize(TObject *Sender);
private: // User declarations
TCanvas *WindowCanvas;
TRect CaptionRect;
AnsiString CustomCaption;
TColor FinalCaptionColor;
int FinalBlueIntensity;
int FinalGreenIntensity;
int FinalRedIntensity;
bool IsNT35;
bool HeartBeat;
bool CanDrawMyCustomCaption(void);
void CalculateCaptionRect(void);
void DrawGradient(void);
void DrawIcon(void);
void DrawCaptionString(void);
void DrawHeartBeatLight(void);
void __fastcall WMNCPaint(TMessage &Msg);
void __fastcall WMNCActivate(TWMNCActivate &Msg);
public: // User declarations
__fastcall TForm1(TComponent* Owner);
__fastcall ~TForm1(void);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_NCPAINT,TMessage,WMNCPaint)
MESSAGE_HANDLER(WM_NCACTIVATE,TWMNCActivate,WMNCActivate)
END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------
extern TForm1 *Form1;
//---------------------------------------------------------------------------
#endif





//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop

#include "MAINFORM.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
CustomCaption = "Custom Caption";
Caption = "";
WindowCanvas = new TCanvas;
// this code determines if we are running on NT3.X
TOSVersionInfo ver;
ver.dwOSVersionInfoSize = sizeof(TOSVersionInfo);
GetVersionEx( &ver);
if(ver.dwMajorVersion < 4)
{
// if the OS is NT 3.5, the custom caption won't be drawn
// use the Caption property as usual, since the custom
// caption won't be able to draw the string.
IsNT35 = true;
Caption = CustomCaption;
}
else
IsNT35 = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Exit1Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::WMNCActivate(TWMNCActivate &Msg)
{
Msg.Result = true; // always handle this message;
if ((bool)Msg.Active == false) // if non-active draw default
{ // non-active title bar
DefWindowProc( Handle, Msg.Msg, Msg.Active, 0 );
// add code here to draw caption when window is inactive.
// in this example, we leave the inactive caption alone.
return;
}
TMessage PaintMsg; // if active, do same thing as WMNCPaint
PaintMsg.Msg = Msg.Msg; // create a MSG to pass to WMNCPaint and
PaintMsg.WParam = Msg.Active; // call the function directly so painting
WMNCPaint(PaintMsg); // happens now.
}

void __fastcall TForm1::WMNCPaint(TMessage &Msg)
{
// use default processing to draw min/max/close buttons, menu, and the
// frame. the caption bar is drawn too, but we paint over that later.
DefWindowProc(Handle, Msg.Msg,Msg.WParam,Msg.LParam);

// Check for any reason not to draw the custom caption
if(CanDrawMyCustomCaption() == false)
return;

// create a DC for the entire window, then assign
// the handle to the window canvas
HDC WindowDC = GetWindowDC(Handle);
WindowCanvas->Handle = WindowDC;

CalculateCaptionRect(); // calculate size of caption bar
DrawGradient(); // draw the shaded gradient
DrawIcon(); // patch the icon
DrawCaptionString();
DrawHeartBeatLight(); // draw the LED heartbeat

ReleaseDC(Handle, WindowDC); // free resources
WindowCanvas->Handle = 0;
}

bool TForm1::CanDrawMyCustomCaption(void)
{
// under certain conditions we don't want to shade the custom caption.
// this function bundles all of the reasons into one.
if (WindowCanvas == 0) // WMNCPaint can execute after
return false; // destructor has been called.
if(Application->Active == false) //can get WM_NCPAINT messages
return false; // when inactive
if(Width < 150) // shading looks poor at very small
return false; // widths
if(IsNT35 == true) // NT has 3.5 has win3 style system menu
return false; // and centered caption text, so forget it

// shading looks poor if its from black to a very light color, Word actually
// shades from white instead of black for light caption colors, we will just not
// shade for light colored captions. Light colors have high RGB values
FinalCaptionColor = TColor(GetSysColor(COLOR_ACTIVECAPTION));
FinalBlueIntensity = GetBValue(FinalCaptionColor);
FinalGreenIntensity= GetGValue(FinalCaptionColor);
FinalRedIntensity = GetRValue(FinalCaptionColor);
// is at least one of the RGB values dark, if not, don't draw the shading
if ((FinalBlueIntensity < 128) || (FinalGreenIntensity < 128) || (FinalRedIntensity < 128) )
return true;
else
return false;
}

void TForm1::CalculateCaptionRect(void)
{
// determine the coordinates of the custom area of the caption. The left, top,
// and bottom must be calculated precisely. The right value is an arbitrary
// value that keeps us away from the min/max buttons.
CaptionRect.Left = GetSystemMetrics(SM_CXFRAME);
CaptionRect.Right= Width- 4*GetSystemMetrics(SM_CXSIZE); // stay away from btns
CaptionRect.Top = GetSystemMetrics(SM_CYFRAME);
CaptionRect.Bottom=CaptionRect.Top + GetSystemMetrics(SM_CYCAPTION)-1;
}


void TForm1::DrawGradient(void)
{
// Shading involves gradually increasing RGB color values from 0 (black)
// to the final RGB value of the caption color. The Increment values
// will be multiplied by 0,1..31 to create 32 shades. The FinalXXX
// values are calculated inside of CanDrawMyCustomGraphics
int BlueIncrement = (FinalBlueIntensity+1) / 32; // max intensity is 255,
int GreenIncrement= (FinalGreenIntensity+1)/32; // adding 1 makes number
int RedIncrement = (FinalRedIntensity+1)/32; // evenly divisible by 32.

TRect Section = CaptionRect;
// SectionWidth represents the width of each gradient section. Caption
// bar will contain 36 gradient sections, 5 sections will be black, the
// remaining 31 sections will be between black and the caption color
int SectionWidth = (CaptionRect.Right - CaptionRect.Left)/36;
TColor FillColor(clBlack);
Section.Right = Section.Left + 5*SectionWidth; //draw 5 sections of black
WindowCanvas->Brush->Color = FillColor; //configure the brush
WindowCanvas->Brush->Style = bsSolid;
WindowCanvas->FillRect(Section); //fill in black sections
Section.Left+=5*SectionWidth; //move section over

for (int j=1;j<=31;j++) // loop through the shades of color
{ // from black to the caption color
Section.Right = Section.Left + SectionWidth; // size the section
FillColor = (TColor) RGB((RedIncrement*j), // create dithered color
(GreenIncrement*j), // based on loop index.
(BlueIncrement*j));
WindowCanvas->Brush->Color = FillColor; // set brush to new color
WindowCanvas->FillRect(Section); // brush fill the section
Section.Left += SectionWidth; // move section over
}
}


void TForm1::DrawIcon(void)
{
// Need to redraw the system icon because DrawGradient just painted
// over it with black. DrawGradient painted over it because the icon
// had the caption color surrounding it.
int IconWidth = GetSystemMetrics(SM_CXSMICON); // calculate width and
int IconHeight= GetSystemMetrics(SM_CYSMICON); // height of icon
TRect Section;
Section.Left=CaptionRect.Left+2; // determine where the icon belongs
Section.Top =CaptionRect.Top +1;
Section.Right=Section.Left + IconWidth; // size the rect to hold the icon
Section.Bottom=Section.Top + IconHeight;

// paint the application icon, could avoid stretching by
// supplying a 16 by 16 icon.
DrawIconEx(WindowCanvas->Handle, Section.Left, Section.Top, // api call
Application->Icon->Handle,IconWidth,IconHeight,0,NULL,DI_NORMAL);
}


void TForm1::DrawCaptionString(void)
{
// need to draw our own caption string. must avoid using the Caption
// form member to avoid flicker
RECT r; // need an API style rect
r.left=CaptionRect.Left + 2 + 16 + 4; // size the rect
r.right=CaptionRect.Right-20;
r.top = CaptionRect.Top;
r.bottom = CaptionRect.Bottom;
SetBkMode(WindowCanvas->Handle,TRANSPARENT); // transparent mode so text
WindowCanvas->Font->Color=clWhite; // does not wipe out shading
WindowCanvas->Font->Style = WindowCanvas->Font->Style << fsBold;
DrawText(WindowCanvas->Handle,CustomCaption.c_str(),CustomCaption.Length(),
&r,DT_SINGLELINE|DT_VCENTER); // draw with vert centered text
}


void TForm1::DrawHeartBeatLight(void)
{
// draw a little LED style heartbeat indicator. this is just an
// ellipse with varying fill color
TRect Section = CaptionRect;
int cYCaption = GetSystemMetrics(SM_CYCAPTION);
if(HeartBeat == true)
WindowCanvas->Brush->Color = (TColor) RGB(0,255,0); // bright green
else
WindowCanvas->Brush->Color = clBlack;
WindowCanvas->Pen->Color=clBlack;
WindowCanvas->Ellipse(Section.Right-cYCaption/2,
Section.Top +cYCaption/4,
Section.Right,
Section.Bottom-cYCaption/4);
}

__fastcall TForm1::~TForm1(void)
{
delete WindowCanvas;
WindowCanvas = 0; // zero canvas so CanDrawMyCustomCaption can
// block use of an invalid pointer.
}

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
HeartBeat = !HeartBeat;
Perform(WM_NCPAINT,1,0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
Perform(WM_NCPAINT,1,0);
}
//---------------------------------------------------------------------------
hzg115 2001-07-31
  • 打赏
  • 举报
回复
hzg115@sina.com
来一个
chzhli186858 2001-07-31
  • 打赏
  • 举报
回复
我学习一下
ExitWindows 2001-07-31
  • 打赏
  • 举报
回复
up
gqxs 2001-07-31
  • 打赏
  • 举报
回复
up
VSaber 2001-07-30
  • 打赏
  • 举报
回复
to 耗子!
而且Delphi中的消息处理机制和C++Builder中的不一样,有天大的不一样。


请教一下,有什么不一样,我不明白什么意思呢?呵呵 :)
ddeng 2001-07-30
  • 打赏
  • 举报
回复
算我一个,学习学习haoel(耗子)高人的东东,先谢了。dengbcb@263.net
shally5 2001-07-30
  • 打赏
  • 举报
回复
我也想要一份
shally5@163.net
kyosuke 2001-07-30
  • 打赏
  • 举报
回复
我也想看看,谢谢。
kasuga@263.net
Chxis 2001-07-30
  • 打赏
  • 举报
回复
haoel(耗子)
那是a.eml可是没有代码啊?
haoel 2001-07-30
  • 打赏
  • 举报
回复
寄给你了。juco11@21cn.com
Chxis 2001-07-30
  • 打赏
  • 举报
回复
haoel(耗子) 兄,
我想要个
juco11@21cn.com
wangxd 2001-07-30
  • 打赏
  • 举报
回复
我的技巧大全中有,请到wangxd.21tt.com下栽
haoel 2001-07-30
  • 打赏
  • 举报
回复
楼上那位仁兄给出的delphi程序不错。

只不过他是以控件的方式给出的,看起来倒反会让人很难懂。
而且Delphi中的消息处理机制和C++Builder中的不一样,有天大的不一样。

所以,我还是把程序寄给你了,那个程序在BCB5.0下运行通过。如果还有别的网友要,请告诉我。
haoel 2001-07-30
  • 打赏
  • 举报
回复
好了,我把程序发到你的邮箱了。请查收。
aningstar 2001-07-30
  • 打赏
  • 举报
回复
给你一篇Delphi的
-- 大家在使用某些软件的过程中,有没有注意到有些软件有一些很有趣的东西。比如说在主窗口的标题栏上居然有一个按钮。在Internet中随处可见这样的小控件。按钮怎么可以加入到非客户区(Client)呢?

---- 在这里,最关键的一点就是,大家不要被传统知识误导:真的认为它是一个按钮。有名柄(handle)的控件当然不能放在标题栏上了。有经验的程序员用Spy++跟踪一下的话,马上就会发现其中的秘密。它并不是一个按钮,只不过是处理成按钮的样子罢了。

---- 既然知道了所以然,那么我们为什么不能自己来做一个呢,当然没问题,下面我们就用Delphi来实现它,讲注意我的注解。

---- 在具体实例之前,我们应该知道几个关于标题栏的重要的消息:

---- WM_NCPAINT:重画标题栏消息。我们必须截住它,可以在这里重画按钮;

---- WM_NCLBUTTONDOWN:在标题栏上按下鼠标左键消息。我们可以截住它,在标题栏上画出按钮按下的样子,并且可以在其中进行自已的单击事件的处理,使得它像一个按钮;

---- WM_NCLBUTTONUP:在标题栏上释放鼠标左键消息。我们可以截住它,在标题栏上画出按钮弹起的样子;

---- WM_NCLBUTTONDBLCLK:在标题栏上双击鼠标左键消息。我们可以截住它,当在按钮区域双击时,我们就该使其无效,从而避免窗体执行最大化和还原操作。

---- WM_NCRBUTTONDOWN:在标题栏上按下鼠标右键消息。我们可以截住它,当在按钮区域双击时,我们就该使其无效,从而避免弹出窗体按制菜单。

---- WM_NCMOUSEMOVE:在标题栏上移动鼠标消息。我们可以截住它,当鼠标移出按钮区域时,我们就必须画出按钮没有被按下,即凸起时的样子。

---- WM_NCACTIVATE:当标题栏在激活与非激活之间切换时收到该消息。我们可以截住它,当该窗口处理激活状态时,我们可以做一些事情,比如说将我们的标题栏按钮上的字体变灰或变黑来指示该窗口的当前状态。下面我没有加入该项功能,如果大家感兴趣的话,可以自己完成。

---- (大家从这里可以发现,标题栏的消息都是WM_NC开头的)
////////////////////////////////////////////////////////////////////////////////
unit Capbtn;

interface

uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, Buttons;

type
TTitleBtnForm = class(TForm)
procedure FormResize(Sender: TObject);
private
TitleButton : TRect;
procedure DrawTitleButton;
{Paint-related messages}
procedure WMSetText(var Msg : TWMSetText); message WM_SETTEXT;
procedure WMNCPaint(var Msg : TWMNCPaint); message WM_NCPAINT;
procedure WMNCActivate(var Msg : TWMNCActivate); message WM_NCACTIVATE;
{Mouse down-related messages}
procedure WMNCHitTest(var Msg : TWMNCHitTest); message WM_NCHITTEST;
procedure WMNCLButtonDown(var Msg : TWMNCLButtonDown); message

WM_NCLBUTTONDOWN;
function GetVerInfo : DWORD;
end;

var
TitleBtnForm: TTitleBtnForm;

const
htTitleBtn = htSizeLast + 1;

implementation
{$R *.DFM}

procedure TTitleBtnForm.DrawTitleButton;
var
bmap : TBitmap; {Bitmap to be drawn - 16 X 16 : 16 Colors}
XFrame, {X and Y size of Sizeable area of Frame}
YFrame,
XTtlBit, {X and Y size of Bitmaps in caption}
YTtlBit : Integer;
begin
{Get size of form frame and bitmaps in title bar}
XFrame := GetSystemMetrics(SM_CXFRAME);
YFrame := GetSystemMetrics(SM_CYFRAME);
XTtlBit := GetSystemMetrics(SM_CXSIZE);
YTtlBit := GetSystemMetrics(SM_CYSIZE);

{$IFNDEF WIN32}
TitleButton := Bounds(Width - (3 * XTtlBit) - ((XTtlBit div 2) - 2),
YFrame - 1,
XTtlBit + 2,
YTtlBit + 2);

{$ELSE} {Delphi 2.0 positioning}
if (GetVerInfo = VER_PLATFORM_WIN32_NT) then
TitleButton := Bounds(Width - (3 * XTtlBit) - ((XTtlBit div 2) - 2),
YFrame - 1,
XTtlBit + 2,
YTtlBit + 2)
else
TitleButton := Bounds(Width - XFrame - 4*XTtlBit + 2,
XFrame + 2,
XTtlBit + 2,
YTtlBit + 2);
{$ENDIF}


Canvas.Handle := GetWindowDC(Self.Handle); {Get Device context for drawing}
try
{Draw a button face on the TRect}
DrawButtonFace(Canvas, TitleButton, 1, bsAutoDetect, False, False, False);
bmap := TBitmap.Create;
bmap.LoadFromFile('help.bmp');
with TitleButton do
{$IFNDEF WIN32}
Canvas.Draw(Left + 2, Top + 2, bmap);
{$ELSE}
if (GetVerInfo = VER_PLATFORM_WIN32_NT) then
Canvas.Draw(Left + 2, Top + 2, bmap)
else
Canvas.StretchDraw(TitleButton, bmap);
{$ENDIF}

finally
ReleaseDC(Self.Handle, Canvas.Handle);
bmap.Free;
Canvas.Handle := 0;
end;
end;

{Paint triggering events}
procedure TTitleBtnForm.WMNCActivate(var Msg : TWMNCActivate);
begin
Inherited;
DrawTitleButton;
end;

procedure TTitleBtnForm.FormResize(Sender: TObject);
begin
Perform(WM_NCACTIVATE, Word(Active), 0);
end;

{Painting events}
procedure TTitleBtnForm.WMNCPaint(var Msg : TWMNCPaint);
begin
Inherited;
DrawTitleButton;
end;

procedure TTitleBtnForm.WMSetText(var Msg : TWMSetText);
begin
Inherited;
DrawTitleButton;
end;

{Mouse-related procedures}
procedure TTitleBtnForm.WMNCHitTest(var Msg : TWMNCHitTest);
begin
Inherited;
{Check to see if the mouse was clicked in the area of the button}
with Msg do
if PtInRect(TitleButton, Point(XPos - Left, YPos - Top)) then
Result := htTitleBtn;
end;

procedure TTitleBtnForm.WMNCLButtonDown(var Msg : TWMNCLButtonDown);
begin
inherited;
if (Msg.HitTest = htTitleBtn) then
ShowMessage('You pressed the new button');
end;

function TTitleBtnForm.GetVerInfo : DWORD;
var
verInfo : TOSVERSIONINFO;
begin
verInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
if GetVersionEx(verInfo) then
Result := verInfo.dwPlatformID;
{Returns:
VER_PLATFORM_WIN32s Win32s on Windows 3.1
VER_PLATFORM_WIN32_WINDOWS Win32 on Windows 95
VER_PLATFORM_WIN32_NT Windows NT }
end;

end.
加载更多回复(9)
UIDesigner(腾讯公司出品) 在软件设计阶段,交互设计师或者产品经理等常常需要使用一些工具(比如Visio、Axure RP、Flash或者OmniGraffle等)制作出静态稿或者原型来表达设计思想。这些工具是各有各的优势,当然也各有各的缺点啦。那么腾讯CDC是如何设计软件原型的呢?这里向大家介绍我们正在研发的原型设计利器UIDesigner。   首先,先让我们来验一下UIDesigner制作出来的原型效果。这个原型是一个设置,主要由按钮、复选框、分组框和文本框等控件构成,其中一些按钮还具有响应的动作(如打开另一个界面,关闭等)。如图一所示,这是使用Firework制作出来的交互图。 图一、使用Firework制作出来的设计稿   这种交互图的特点是简单明了,能够表示出各种控件的基本属性(如文本、位置和选中状态等),但它只是一个静态的图片,不能真实表现出每个控件的响应动作,如仅看这张图,是不清楚点击代理服务器设置分组框上的“设置…”按钮会有什么响应的。   那再看看你若使用UIDesigner制作出来的效果:最终输出的是一个EXE可执行文件(见图二左上角),双击运行后就会出现一个与最终实现效果完全一致的(见图二右)。另外,它还是一个具有响应动作的真实原型,例如你若点击了“设置…”按钮,那就会弹出一个新的(见图三)。 图二、使用UIDesinger制作出来的原型 图三、点击“设置…”按钮后弹出的另一   实际上,这个新弹出的都是一个独立的原型,也是由UIDesigner制作出来的。由于它里面的控件同样可以设置下一步的响应动作,所以从总上来看,众多原型就像一个树状结构,而其中的父节点就是图二中的设置了。这种结构具有一个很大的好处:无论你完成了多个界面的原型,只需要它们之间有链接关系,最后输出的只是一个EXE可执行文件。这样,你可以很方便地与其它人员表达自己的设计思路,让沟通变得更加快捷。   接下来,我们看看这个原型是如何制作出来的。   第一步:建立空白,调整它的大小、风格、标题和Icon 图四、使用UIDesigner制作原型—建立   第二步:从工具箱中拖曳控件到上,修改这些控件的属性(如Text等) 图五、使用UIDesigner制作原型—加入控件   由于UIDesigner具有自动对齐的功能,所以在拖动控件到时就可以完成排版工作,不需要再逐个像素去调整。另外,不单单在加入控件到时,在改变已存在于内的控件的位置或者大小时,自动对齐功能一样会生效。这样,设计者在调整控件大小或者位置时(包括控件与控件,控件与边缘等的距离等情况),工作变得很简单。 图六、使用UIDesigner制作原型—自动对齐功能   第三步:几分钟后,所有的控件都放到并设置好属性了,如下图。 图七、使用UIDesigner制作原型—整界面效果   此时,设计者就可以使用软件的导出图片或者导出原型功能分享你的设计成果了。当然,现在这种效果还只是一个没有响应动作效果的原型。接下来,我们再给“设置…”按钮加入响应动作。首先,选中“设置…”按钮,然后点击工具的“响应”按钮,你将会看到如图八的响应设置口。此时,你可以选择打开、打开网页、弹出对话框、修改属性值和关闭本身等五种效果,这里我们选择“打开”,然后在弹出的对话框里指向弹出的文件。最后,点击“完成”按钮即可。 图八、使用UIDesigner制作原型—设置控件的响应动作   到此为止,你就完成了一个与最终实现效果完全一致的高保真原型了。产品经理和开发人员等若想了解你的设计思想就不需要看着长长几页的说明文档了,而只需要运行你输出的原型文件,就可以对你的设计思路一目了然。   UIDesigner除了能让使用者能够快速地搭建起软件界面的高保真原型外,还提供了项目管理,让使用者能够方便地管理工程文件;提供了图片库和模板库功能,让使用者可以方便地重用以前的设计资源;提供了32个Windows客户端软件常用控件,满足使用者的设计需求;提供了多个属性设置入口,分别实现最常用属性设置、一般属性设置和高级属性设置功能。当然,UIDesigner不是专用来设计QQ的,其它的Windows客户端产品都在它的工作范围之内。总的来说呢,使用UIDesigner来制作原型是很高效的,而制作出来的原型也能够实现设计师、产品经理和程序开发工程师三者间的快速沟通,减少不必要的工作内耗。 ------------------------------------------------------------------ GUI_Design_Studio_3.5.94.0 在2008年,这款软件的作者从1,322位付费用户那获得了162,302美元的收入(其中仅12月份就有39,000美元),这令人鼓舞地证明了只要是提供真正价值的服务和软件,就能够创造很好的收入,即使在经济萧条的寒冬里。 GUI Design Studio是一款图形用户界面设计工具,您能用它在不需要编写任何代码或脚本的情况下快速地创建演示原型。使用标准元素绘制个人化的屏幕、口以及控件;将它们整合以展示操作工作流然后运行模拟程序测试您的设计。 当您需要绘制一款应用程序的外观或显示怎样将程序的各个部分连接起来时,您就可以使用GUI Design Studio来实现,如: 将产品创意文档化 制作项目提案 需求记录 创建屏幕图样 为开发人员制作详细的规格 为现有产品提出加强方案 以及更多其它用途 为用户以及股东甚至您自己制作展示文件以: 验证设计 找出替代项 评估多个使用场景 系统需求 Microsoft Windows Vista/XP/NT/2000 至少15MB的硬盘空间 推荐不少于256MB的内存 工程 将您的工作组织放到工程里。 每个工程都拥有它自己的文件夹结构。 可连接您计算机或网络上任何地方的其它库工程。 可连接到您计算机或网络上任何地方使您能够方便地获取图片以及其它文件。 创建您想要的并独立于所有工程的个人化设计文件。 创建能重复使用的设计库以及工程之间的一致性。 将图片直接从剪贴板中粘贴到工程文件夹的文件中。 屏幕设计程序 可同时打开多个设计文档并能使用分页界面在文档间快速切换。 可使用标准Windows元素创建图形用户界面(GUI)屏幕,包括框架口、会话、菜单、工具、标签、按钮、复选框、单选按钮、滚动条、滑动调节框、微调框、组合框、树列表、列表框、编辑框以及静态文本等。 通过现有元素或其它自定义控件创建自定义控制组件。 在其它设计中创建将要使用的控件设计。 以常用的文件格式添加图标与图片。 从能够显示您将获得什么的控件面板中进行拖放操作。 属性编辑程序使您能将每个元素进行自定义。 元素的自动生成功能。 您能在任何地方放置任何元素。 Edge snapping能通过“点击”对屏幕元素进行统一记录。 设计网格向您提供了简单的制作具有一致性设计布局的方法。 只需单键点击就能排列元素组。 均衡地隔开元素组。 调整元素大小以适应其它元素或测量一组其它元素。 聚焦缩小以查看细节设计或聚焦放大以浏览设计概况。使用工具按键或键盘或鼠标的滑动缩小放大功能聚焦增量。 使用鼠标的滚动以及滚轮功能快速浏览设计的概况。 剪切、复制与粘贴。 使用可选的canvas向导显示可用的屏幕空间。 通过文本框与书签对您的设计进行注释。 为每个设计添加说明。 选择色彩主题以避免实际功能口的混淆。 图标 为图标面板提供快速的访问方式。 工程间可共享常用图标。 工程也能拥有它们独享的图标集。 使用将来在实际产品开发中可能用到的标准ICO文件。 包含的Icon Express编辑程序支持16色、256色以及最大尺寸为127 x 127的真彩图标。 如果愿意同样能整合任意其它的图标编辑应用程序。 展示与原型 在可导航元素(如按键与口)之间创建连接以显示控制流程。 为图象添加覆盖保护以及添加其它元素以创建可导航的热点。 支持形式化与非模态的口并支持显示、隐藏或微调口,以及口替换以实现切换效果。 锚点使您能对口进行准确定位。 能立即在模拟程序中测试或展示您的设计。 添加消息框以描述可能在真实应用程序中出现的功能。 可创建多种场景,如正常条件下的场景与多个出错场景。 选择要激活的场景或让模拟程序为您选择。 更改有效的屏幕分辨率以查看您的设计如何适应不同的屏幕大小。 在没有进行脚本或代码编写的情况下,所有操作都是以图形模式完成。 ------------------------------------------------------------------ Balsamiq_Mockups_1.8.4 1. 首先安装 AdobeAIRInstaller.exe 2. 安装主程序 MockupsForDesktop.air 3. 使用 keygen 进行注册 在Balsamiq Mockups中绘制界面原型,就像在纸张和白板上手工绘画一样方便快速,而且不用担心出错,因为你完全可以进行回复/重做。在Balsamiq Mockups中设计原型比在纸张和白板可有趣多了! 丰富的控件支持 Balsamiq Mockups预先提供了丰富的控件,如浏览器口、媒播放器组件、圆形图表等,让你信手拈来! 丰富的控件 方便的属性设置 当你选择一个控件时,会立刻出现该控件的属性选项,你可以随时编辑修改属性。 属性设定 无限的恢复/重做,不用担心出错,你可以无限制的进行回复和重做。 开放,可移植的数据 Balsamiq Mockups所生成的数据是易于阅读的XML格式数据,你可以进行方便的移植和重用集成。 开放的数据 多种方式的集成应用,你可以将Balsamiq Mockups集成倒Confluence, Jira, XWiki中. 集成应用 Balsamiq Mockups是一款免费的带有手绘风格的原型设计软件,可以帮助你设计桌面应用软件,Web 2.0 站点, RIA富网络应用程序, Web站点和Web应用软件。 功能和亮点: 操作方面:拖拽,控件分组,甚至元素之间的对齐都做得很到位; 预制了六十多个界面元素,从简单的输入框,下拉框,到经常用得到的导航条,日历,表格,到复杂的Tag Cloud,Cover Flow, 地图,WYSWYG的格式工具等,有了这些不用从头画起,其实比用白板都快; 界面元素的修改很简单,比如导航条的几个标签页的label,就是用逗号分隔的文字,下拉框的选项就是分行的文字; 使用xml语言来记录和保存界面元素和布局,从而使其能够快速的导入到你所需的任何一个项目中,或其他工具中。 可以将设计导出成PNG格式的图片; 随着使用的熟练,快捷键便派上用场,超过一半的元素均有快捷方式,这更有助于原型的快速构造,几乎几分钟便可实现一个满意的而复杂的原型设计; 跨平台,Balsamiq Mokups是用Flex和Air实现的,所以在Mac OS, Linux和Windows下都能使用; 不仅仅有桌面版本,还有能集成在Confluence,JIRA,和XWiki中的版本,使得异地在线协作更方便有效。 可以用命令行进行导出操作,这样就能让我写个脚本,从svn里checkout某个目录下的所有设计文件后,导出图片,打包后用邮件发到项目经理,工程师甚至客户那; 跨平台,Balsamiq Mokups是用Flex和Air实现的,所以在Mac OS, Linux和Windows下都能使用;不仅仅有桌面版本,还有能集成在Confluence,JIRA,和XWiki中的版本,使得异地在线协作更方便有效;据作者说,现在这款软件的设计就是用它自己来设计的,经典的“吃自己的狗粮”,这也让我对其更有信心,因为它是开发者为开发者写的软件。 还有值得一提的是Balsamiq Mokups的在GetSatisfaction上的用户支持和服务,作者Peldi对问题报告,新需求的回应很积极和及时。而且根据这个讨论上看,到月底就会有一个专门用来分享界面控件设计的社区网站了,很期待。 再要说的一点是这款软件是要付费的,79美元(也可以免费,具如何免费,请看网站上的说明),相对于它能节省下来的时间和提高的效率,是很值得的。Peldi说在2008年,这款软件就从1,322位付费用户那获得了162,302美元的收入(其中仅12月份就有39,000美元),这令人鼓舞地证明了只要是提供真正价值的服务和软件,就能够创造很好的收入,即使在经济萧条的寒冬里。
第1章 与界面设计   1.1 菜单应用实例    实例001 在系统菜单中添加菜单项    实例002 带图标的程序菜单    实例003 根据表中数据动态生成菜单    实例004 浮动的菜单   1.2 弹出菜单应用实例    实例005 在控件上单击右键弹出菜单    实例006 个性化的弹出菜单    实例007 任务托盘弹出菜单   1.3 工具应用实例    实例008 带背景的工具    实例009 带图标的工具    实例010 带下拉菜单的工具    实例011 可调整按钮位置的工具    实例012 XP风格工具    实例013 动态设置是否显示工具按钮文本    实例014 具有提示功能的工具   1.4 状态应用实例    实例015 带进度条的状态    实例016 动画效果的状态    实例017 滚动字幕的状态   1.5 导航界面应用实例    实例018 Outlook导航界面    实例019 树状导航界面    实例020 按钮导航界面    实例021 图片导航界面   1.6 界面应用实例    实例022 使用位图设计畸形界面    实例023 椭圆形的程序界面    实例024 自绘界面    实例025 以时钟显示界面    实例026 融合技术    实例027 限制对话框最大时的口大小    实例028 分割视图口    实例029 对话框全屏显示   1.7 多媒宣传光盘应用实例    实例030 多媒宣传光盘主界面    实例031 自动运行的多媒宣传光盘   1.8 多媒触摸屏程序应用实例    实例032 采购中心多媒触摸屏程序    实例033 为触摸屏程序添加虚拟键盘   1.9 位置应用实例    实例034 不可移动的    实例035 始终在最上面的    实例036 以动画形式显示    实例037 磁性   1.10 标题应用实例    实例038 闪烁的标题    实例039 拖动没有标题    实例040 禁用标题上的最大化、最小化或关闭按钮   1.11 形状及应用    实例041 半透明    实例042 创建字型    实例043 设计桌面精灵   1.12 通用对话框的应用    实例044 打开位图预览对话框    实例045 打开Windows新型对话框    实例046 同时选择多个文件    实例047 文本替换对话框    实例048 字选择对话框  第2章 控件应用   2.1 按钮控件典型实例    实例049 AVI动画按钮    实例050 GIF动画按钮    实例051 图文按钮    实例052 不规则按钮    实例053 热点按钮   2.2 编辑框控件典型实例    实例054 为编辑框设置新的系统菜单    实例055 为编辑框控件添加列表选择框    实例056 多彩边框的编辑框    实例057 改变编辑框文本颜色    实例058 不同文本颜色的编辑框    实例059 位图背景编辑框   2.3 静态文本控件典型实例    实例060 电子计时器    实例061 使用静态文本控件设计群组框    实例062 制作超链接控件   2.4 列表框控件典型实例    实例063 利用列表框控件实现标签式数据选择    实例064 具有水平滚动条的列表框控件    实例065 列表项的提示条    实例066 位图背景列表框控件   2.5 组合框控件典型实例    实例067 将数据表中的字段添加到组合框控件    实例068 带查询功能的组合框控件    实例069 自动调整组合框的宽度    实例070 颜色组合框    实例071 多列显示的组合框    实例072 带图标的组合框    实例073 显示系统盘符组合框   2.6 列表视图控件典型实例    实例074 Windows资源管理器    实例075 利用列表视图控件浏览数据    实例076 利用列表视图控件制作导航界面    实例077 在列表视图中拖动视图项    实例078 具有排序功能的列表视图控件    实例079 具有文本录入功能的列表视图控件    实例080 使用列表视图设计登录界面   2.7 树视图控件典型实例    实例081 多级数据库树状结构数据显示    实例082 节点拖动功能的树控件    实例083 带复选功能的树状结构    实例084 三态效果树控件    实例085 修改树控件节点连线颜色    实例086 位图背景树控件    实例087 显示磁盘目录    实例088 树型提示
第1章 与界面设计   1.1 菜单应用实例    实例001 在系统菜单中添加菜单项    实例002 带图标的程序菜单    实例003 根据表中数据动态生成菜单    实例004 浮动的菜单   1.2 弹出菜单应用实例    实例005 在控件上单击右键弹出菜单    实例006 个性化的弹出菜单    实例007 任务托盘弹出菜单   1.3 工具应用实例    实例008 带背景的工具    实例009 带图标的工具    实例010 带下拉菜单的工具    实例011 可调整按钮位置的工具    实例012 XP风格工具    实例013 动态设置是否显示工具按钮文本    实例014 具有提示功能的工具   1.4 状态应用实例    实例015 带进度条的状态    实例016 动画效果的状态    实例017 滚动字幕的状态   1.5 导航界面应用实例    实例018 Outlook导航界面    实例019 树状导航界面    实例020 按钮导航界面    实例021 图片导航界面   1.6 界面应用实例    实例022 使用位图设计畸形界面    实例023 椭圆形的程序界面    实例024 自绘界面    实例025 以时钟显示界面    实例026 融合技术    实例027 限制对话框最大时的口大小    实例028 分割视图口    实例029 对话框全屏显示   1.7 多媒宣传光盘应用实例    实例030 多媒宣传光盘主界面    实例031 自动运行的多媒宣传光盘   1.8 多媒触摸屏程序应用实例    实例032 采购中心多媒触摸屏程序    实例033 为触摸屏程序添加虚拟键盘   1.9 位置应用实例    实例034 不可移动的    实例035 始终在最上面的    实例036 以动画形式显示    实例037 磁性   1.10 标题应用实例    实例038 闪烁的标题    实例039 拖动没有标题    实例040 禁用标题上的最大化、最小化或关闭按钮   1.11 形状及应用    实例041 半透明    实例042 创建字型    实例043 设计桌面精灵   1.12 通用对话框的应用    实例044 打开位图预览对话框    实例045 打开Windows新型对话框    实例046 同时选择多个文件    实例047 文本替换对话框    实例048 字选择对话框  第2章 控件应用   2.1 按钮控件典型实例    实例049 AVI动画按钮    实例050 GIF动画按钮    实例051 图文按钮    实例052 不规则按钮    实例053 热点按钮   2.2 编辑框控件典型实例    实例054 为编辑框设置新的系统菜单    实例055 为编辑框控件添加列表选择框    实例056 多彩边框的编辑框    实例057 改变编辑框文本颜色    实例058 不同文本颜色的编辑框    实例059 位图背景编辑框   2.3 静态文本控件典型实例    实例060 电子计时器    实例061 使用静态文本控件设计群组框    实例062 制作超链接控件   2.4 列表框控件典型实例    实例063 利用列表框控件实现标签式数据选择    实例064 具有水平滚动条的列表框控件    实例065 列表项的提示条    实例066 位图背景列表框控件   2.5 组合框控件典型实例    实例067 将数据表中的字段添加到组合框控件    实例068 带查询功能的组合框控件    实例069 自动调整组合框的宽度    实例070 颜色组合框    实例071 多列显示的组合框    实例072 带图标的组合框    实例073 显示系统盘符组合框   2.6 列表视图控件典型实例    实例074 Windows资源管理器    实例075 利用列表视图控件浏览数据    实例076 利用列表视图控件制作导航界面    实例077 在列表视图中拖动视图项    实例078 具有排序功能的列表视图控件    实例079 具有文本录入功能的列表视图控件    实例080 使用列表视图设计登录界面   2.7 树视图控件典型实例    实例081 多级数据库树状结构数据显示    实例082 节点拖动功能的树控件    实例083 带复选功能的树状结构    实例084 三态效果树控件    实例085 修改树控件节点连线颜色    实例086 位图背景树控件    实例087 显示磁盘目录    实例088 树型提示
项目名称:[精仿]360安全卫士-10.30更新(CSkin Demo) 界面库版本号:10.30 最新版本 下载内容: 精仿360安全卫士源码一份, 可引用至工具箱最新版CSkin.dll一份 实现功能: 1.发光标题。 2.直角边框和阴影。 3.360安全卫士主界面模仿。 4.多系统支持,不需要win8系统,即可实现win8风格的360。 5.自定义控件的美化使用。 界面库更新文档: CC2013-10.30 1.由于SkinForm名字太多人使用,界面库命名正式改为CSkin.dll,官网www.cskin.net。 2.SkinTabControl标签中添加菜单箭头,可点击展开菜单。 3.SkinTabControl添加标签关闭按钮。 4.修复部分中文乱码问题。 5.优化好友列表右键菜单。 6.将自定义系统按钮改为集合模式,可添加无数个自定义系统按钮。自定义系统按钮事件中可以 e.参数 来判断。 7.增加360安全卫士-DEMO案例。 8.增加SkinAnimatorImg控件,用于支持位图动画的播放。如360的动态logo。 9.各种细节BUG优化。 CC2013-10.11 1.添加SkinTabControlEx,加入更加自定义的美化属性和动画效果。 2.添加SkinAnimator,通用动画控件。 3.添加Html编辑器控件 4.修复SkinButton图标和文本相对位置的BUG CC2013-9.26 1.优化好友列表CPU占用 2.好友列表加入好友登录平台属性:安卓 苹果 WEBQQ PC 3.优化标题绘制模式,新添标题绘制模式属性。 4.新添标题偏移度属性。 5.加入圆形进度条控件:ProgressIndicator。 CC2013-9.5.2 1.优化截图控件,截图工具加入新功能。 2.解决个人信息卡和天气显示后不会消失的问题。 3.各种细节BUG优化。 CC2013-9.5.1 1.解决贴边左右隐藏的BUG。 2.解决点击事件不能触发的问题。 3.优化SkinButton继承父容器背景色的代码。 4.解决SkinButton异常错误。 CC2013-9.3 1.好友列表右键菜单没反应问题。 2.新增美化控件SkinDatagridview。 3.密码软件盘回删不了文字问题。 4.双击最大化,最大化后再双击恢复原大小,(win7)。 5.部分细节调优。 小编:下载不要分,DEMO教你如何熟练使用CSkin界面库美化自己的。 友情链接: http://bbs.csdn.net/topics/390510544 (精仿QQ2013局域通讯) http://download.csdn.net/detail/lyx_520/5710799 (C#实现Win8)

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧