不规则窗体的源码,我试过了,可以,速度挺快。。

SSTS 2001-05-14 01:24:00
加精
以下源码是快速创建不规则窗体的,还可以移动。
//------------------------------------------------------------------------
//Unit1.h

#ifndef Unit1H
#define Unit1H
//------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
#include <Menus.hpp>
#include <Dialogs.hpp>
#include <ExtDlgs.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TImage *Image1;
TPopupMenu *PopupMenu1;
TMenuItem *Exit1;
TOpenPictureDialog *OpenPictureDialog1;
TMenuItem *Open1;
void __fastcall Exit1Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y);
void __fastcall Open1Click(TObject *Sender);
private: // User declarations
void __fastcall BmpToRgn();
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


//unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Exit1Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{

BmpToRgn();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if(Button == mbLeft)
{
ReleaseCapture();
Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BmpToRgn()
{
Image1->AutoSize=true;
Form1->AutoSize=true;
Form1->BorderStyle=bsNone;
TColor ColorKey=Image1->Canvas->Pixels[0][0];
int x,y;
int l,r;
POINT *a;
bool lb,rb;
HRGN WndRgn,TempRgn;

if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL)
{
ShowMessage("申请内存失败!");
exit(0);
}

l=0;r=Image1->Height*2-1;
WndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);

for(y=0;y<Image1->Height;y++)
{
lb=true;
for(x=0;x<Image1->Width+1;x++)
if(Image1->Canvas->Pixels[x][y]!=ColorKey)
{
a[l].x=x;
a[l].y=y;
lb=false;
break;
}

if(lb) a[l]=a[l-1];
l++;
rb=true;

for(x=Image1->Width;x>=0;x--)
if(Image1->Canvas->Pixels[x][y]!=ColorKey)
{
a[r].x=x;
a[r].y=y;
rb=false;
break;
}
if(rb) a[r]=a[r+1];
r--;
}

r=Image1->Height*2-1;
for(y=0;y<Image1->Height-1;y++)
{
for(x=a[y].x;x<=a[r].x;x++)
if(Image1->Canvas->Pixels[x][y]==ColorKey)
{
TempRgn=CreateRectRgn(x,y,x+1,y+1);
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);
DeleteObject(TempRgn);
}
r--;
}

//TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE);
TempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);
DeleteObject(TempRgn);
delete a;
SetWindowRgn(Handle,WndRgn,true);
}

void __fastcall TForm1::Open1Click(TObject *Sender)
{
if(OpenPictureDialog1->Execute())
{
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
BmpToRgn();
}
}
//---------------------------------------------------------------------------

对啦,图片的背景色要相同。
图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。
...全文
313 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
yunfeifan 2001-11-15
  • 打赏
  • 举报
回复
不过有什么用呢!
HUANG_JH 2001-09-15
  • 打赏
  • 举报
回复
不错
gqxs 2001-08-19
  • 打赏
  • 举报
回复
学习
ThankU 2001-08-19
  • 打赏
  • 举报
回复
谢谢,ilovebcb@163.com
weenyboy 2001-05-14
  • 打赏
  • 举报
回复
weenyboy@sina.com
来一份谢谢
millet 2001-05-14
  • 打赏
  • 举报
回复
to SSTS(铁冰):
你为大家做了贡献,也没有什么好表示的,送你50分吧。分数本来不算什么,但是聊表敬意!

请到此处拿分:
http://www.csdn.net/expert/topic/43/43167.shtm
SSTS 2001-05-14
  • 打赏
  • 举报
回复
这样我就不用发EMAIL给你啦,你们自己粘吧!!
SSTS 2001-05-14
  • 打赏
  • 举报
回复
//---------------透明窗体--------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TRect *rctClient,*rctFrame;
HRGN hClient,hFrame;
POINT *lpTL,*lpBR;
rctFrame=new TRect;
rctClient=new TRect;
lpTL=new POINT;
lpBR=new POINT;
GetWindowRect(Form1->Handle,rctFrame);
::GetClientRect(Form1->Handle,rctClient);
lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;
lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;

::ScreenToClient(Form1->Handle,lpTL);
::ScreenToClient(Form1->Handle,lpBR);
rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;
rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;
rctClient->Left=abs(rctFrame->Left);
rctClient->Top=abs(rctFrame->Top);
rctClient->Right=rctClient->Right+
abs(rctFrame->Left);
rctClient->Bottom=rctClient->Bottom+
abs(rctFrame->Top);
rctFrame->Right=rctFrame->Right+
abs(rctFrame->Left);
rctFrame->Bottom=rctFrame->Bottom+
abs(rctFrame->top);
rctFrame->Top=0;rctFrame->Left=0;

hClient=CreateRectRgn(rctClient->Left,rctClient->Top,
rctClient->Right,rctClient->Bottom);
hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,
rctFrame->Right,rctFrame->Bottom);
CombineRgn(hFrame,hClient,hFrame,RGN_XOR);
SetWindowRgn(Form1->Handle,hFrame,true);


delete rctFrame;
delete rctClient;
delete lpTL,lpBR;

}
SSTS 2001-05-14
  • 打赏
  • 举报
回复
//--------------------(一)为窗体背景增加渐变色(蓝)---------------
void __fastcall TForm1::FormPaint(省略)
{
AnsiString ww;int bb;
ww=AnsiString(Form1->Width/256);
TRect MyRect;
MyRect.left=0;
for(bb=0;bb<255;bb++)
{
Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);
MyRect.top=bb*(ww.ToInt());
MyRect.right=Form1->Width;
MyRect.bottom=(bb+1)*(ww.ToInt());
Form1->Canvas->FillRect(MyRect);
}
}
jackfar 2001-05-14
  • 打赏
  • 举报
回复
是吗??
SSTS 2001-05-14
  • 打赏
  • 举报
回复
人还不少吗!
我怎么记得下这么多的EMAIL啊。
我原以为不会有人要的。。
因为就像上上上。。。。。面那们说的网上到处都是啊。。
不过想要的我尽量给!
我很少上网。
jackfar 2001-05-14
  • 打赏
  • 举报
回复
共20分,不要误会,怎么转???斑竹帮忙把分转一下。






。。。。
jackfar 2001-05-14
  • 打赏
  • 举报
回复
zzzemail@sina.com
当然我出10分,呵呵。。。。。。。。 还有 谁?
APIer 2001-05-14
  • 打赏
  • 举报
回复
这种东西网络上真是到处都有,几乎c程序员都做过吧:)
soyoung 2001-05-14
  • 打赏
  • 举报
回复
大家应该建议版主给这样的兄弟加分,
如果可以,先从我身上出!!!

iflyinsun@263.net


soyoung 2001-05-14
  • 打赏
  • 举报
回复
非常感谢!
iflyinsun@263.net
yuyulily 2001-05-14
  • 打赏
  • 举报
回复
谢谢 yu.hermit@sina.com
luhongjun 2001-05-14
  • 打赏
  • 举报
回复
luhongjun@yeah.net
谢谢。
millet 2001-05-14
  • 打赏
  • 举报
回复
呵呵,给我也来一份吧。
the_millet@sina.com
logical 2001-05-14
  • 打赏
  • 举报
回复
给我一个份好吗?luo_programmer@163.net
加载更多回复(6)
源码下载地址: https://pan.quark.cn/s/0d6e3002ba51 ### IR2110中文资料知识点详述 #### 一、概述 IR2110是一种专为脉冲宽度调制应用而设计的高性能驱动集成电路,在各类功率转换设备中具有广泛的应用,特别是在需要实现隔离驱动的场景下表现出色。该芯片融合了光电隔离与电磁隔离的优势,能够达成快速响应并保持较小的物理尺寸,尤其适合用于中小功率的变换装置。 #### 二、IR2110内部结构与特点 **1. 内部结构** - **封装形式**:采用DIP14引脚封装。 - **内部组成**:由逻辑输入单元、电平平移单元以及输出保护单元这三个主要部分构成。 - **悬浮电源**:借助自举电路实现,使得高端工作电压最高能够达到500V,支持±50V/ns的电压变化率。 - **工作电压范围**:逻辑电源电压范围为5~15V,输出电源端电压范围为10~20V,易于与其他逻辑电平进行匹配。 - **工作频率**:最高可达到500kHz。 - **功耗**:在15V条件下静态功耗仅为116mW。 - **延迟时间**:导通延迟120ns,关断延迟94ns。 - **峰值输出电流**:图腾柱输出峰值电流为2A。 **2. 特点** - **独立输入通道**:具备独立的低端和高端输入通道配置。 - **兼容性**:逻辑电源地与功率地之间允许±5V的偏移量,便于与TTL或CMOS电平进行匹配。 - **自举电源**:内置自举电源电路,有效减少驱动电源的数量,从而简化电路设计。 - **高dv/dt能力**:具有较强的dv/dt抑制能力,适合高频开关应用。 - **低功耗**:工作状态下功耗较低,有利于提升整体效率。 #### 三、高压侧...

551

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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