⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 20001121003.htm

📁 C++Builder教学大全
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<HTML>

<HEAD>

 

<TITLE>利用C++ Builder开发特殊的屏幕显示效果</TITLE>



<META content="MSHTML 5.00.2314.1000" name=GENERATOR>

</HEAD>

<BODY aLink=#FF0000 bgColor=#ffffff leftMargin=0 link=#187800 topMargin=0 

vLink=#990099>



<div align="center">

  <table width="744" border="0" cellspacing="0" cellpadding="0" height="76">

    <tr> 

      <td> 

        <p align="center"><font size="3"><span class=name00><b><br>

          利用C++ Builder开发特殊的屏幕显示效果</b></span></font><span class=name00><br>

          </span><span 

            class=Name01><font color=#666666>(作者:孙航东)</font></span></p>

        <p><br>

          <br>

          <span 

            class=content>  以前,程序员在DOS平台下开发应用软件时,都会利用DOS的开放性特点,通过中断编写出一些特殊的显示效果,以此来给自己的程序增加一些有趣的特色。然而,随着面向Windows的编程和可视化的第四代开发工具的逐步使用,人们越来越被Windows的统一的编程风格所束缚,同时由于Windows直接管理中断,想用原来的方法来实现一些特殊的显示效果变得越来越困难了。 

          <br>

          <br>

            那么,在Windows时代程序员如何来实现窗口的特殊效果呢?实际上,由于整个Windows是图形显示系统,因此对系统而言,用户程序的每一个界面、窗口都是系统的一个画布。程序员可以利用这一特点来实现窗口的特殊效果。 

          <br>

          <br>

            最近笔者利用C++ Builder 5.0 Enterprise成功的实现了该项功能,现介绍如下: <br>

          <br>

            1、在BCB中建立一个工程文件project1.dpr,在Form1中添加如下控件: <br>

          <br>

             控件名称           属性         值 <br>

          <br>

             TForm             Color       clBtnText <br>

          <br>

             TMainMenu           Name        MainMneu1 <br>

          <br>

             TImage             Name         Image1 <br>

          <br>

                            Align       alClient <br>

          <br>

                            AutoSize       True <br>

          <br>

            同时在 MainMenu1控件中增加一个菜单项,其属性为: <br>

          <br>

             Name             Caption <br>

          <br>

             Items1           图像从中间往左右分出 <br>

          <br>

             Items2           图像从左右往中间合进 <br>

          <br>

             Items3           图像从中间往上下分出 <br>

          <br>

             Items4           图像从上下往中间合进 <br>

          <br>

             Items5           图像从左移入 <br>

          <br>

             Items6           图像从右移入 <br>

          <br>

             Items7           图像从上移入 <br>

          <br>

             Items8           图像从下移入 <br>

          <br>

             Items9           图像从左刷屏显示 <br>

          <br>

             Items10          图像从右刷屏显示 <br>

          <br>

             Items11          图像从上刷屏显示 <br>

          <br>

             Items12          图像从下刷屏显示 <br>

          <br>

             Items13          图像从上往下流水 <br>

          <br>

             Items14          图像从下往上流水 <br>

          <br>

             Items15          图像圆形展出 <br>

          <br>

             Items16          图像左右错移 <br>

          <br>

             Items17          图像上下错移 <br>

          <br>

            同时在Unit.cpp中的private中添加如下变量: <br>

          <br>

            private: <br>

          <br>

             BITMAP bm; <br>

          <br>

             Graphics::TBitmap *Bitmap1; <br>

          <br>

             int i,j; <br>

          <br>

             int WideHalf; <br>

          <br>

             TRect Dest1,Source1,Dest2,Source2; <br>

          <br>

            int HeightHalf; <br>

          <br>

            HRGN MyRgn; <br>

          <br>

            2、在Form1的OnCreate事件中添加如下代码: <br>

          <br>

            void __fastcall TForm1::FormCreate(TObject *Sender)//进行图像特效显示的初始化操作// 

          <br>

          <br>

            {       <br>

          <br>

              Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap();//定义一个图象句柄// 

          <br>

          <br>

               Bitmap1-&gt;LoadFromFile("C:\\factory.bmp");//设定所要特效显示的图象为factory.bmp// 

          <br>

          <br>

               if(GetDeviceCaps(Form1-&gt;Canvas-&gt;Handle,BITSPIXEL)==8)//取得显示窗口的颜色属性// 

          <br>

          <br>

               { <br>

          <br>

                GetObject(Bitmap1-&gt;Handle,sizeof(BITMAP),(LPSTR)&amp;bm); <br>

          <br>

                if (bm.bmBitsPixel==8)//如果特效显示的图象颜色属性为256色// <br>

          <br>

                { <br>

          <br>

                 SelectPalette(Form1-&gt;Canvas-&gt;Handle,Bitmap1-&gt;Palette,FALSE);//从特效显示的颜色画板中提取配色方案// 

          <br>

          <br>

                 RealizePalette(Form1-&gt;Canvas-&gt;Handle); //在显示窗口中设置配色方案// 

          <br>

          <br>

                } <br>

          <br>

                Bitmap-&gt;HandleType=bmDDB; <br>

          <br>

                 } <br>

          <br>

               }     <br>

          <br>

            3、在Items1的OnClieck事件中添加如下代码: <br>

          <br>

            void__fastcall TForm1::Item1Click(TObject *Sender) <br>

          <br>

            {      //图象从中间往左右分出// <br>

          <br>

            Form1-&gt;Refresh( ); <br>

          <br>

            WideHalf=Bitmap1-&gt;Width/2+Bitmap1-&gt;Width%2; <br>

          <br>

            for(i=0;i&lt;=WideHalf; i++) <br>

          <br>

             { <br>

          <br>

             Dest1=Rect(WideHalf-i,0,WideHalf+i,Bitmap1-&gt;Height); <br>

          <br>

             Source1=Rect(WideHalf-i,0,WideHalf+i,Bitmap1-&gt;Height); <br>

          <br>

             Form1-&gt;Canvas-&gt;CopyRect(Dest1,Bitmap1-&gt;Canvas,Source1); 

          <br>

          <br>

             for(j=0;j&lt;10000;j++);//图像的延迟显示// <br>

          <br>

            } <br>

          <br>

             } <br>

          <br>

            4、在Items2的OnClieck事件中添加如下代码: <br>

          <br>

            void__fastcall TForm1::Item2Click(TObject *Sender) <br>

          <br>

            {                   //图像从左右往中间合进// <br>

          <br>

            Form1-&gt;Refresh( ); <br>

          <br>

             WideHalf=Bitmap1-&gt;Width/2+Bitmap1-&gt;Width%2; <br>

          <br>

             Form1-&gt;Refresh( ); <br>

          <br>

             for(i=0;i&lt;=WideHalf;i++) <br>

          <br>

             { <br>

          <br>

             Source1=Dest1=Rect(0,0,i,Bitmap1-&gt;Height); <br>

          <br>

             Source2=Dest2=Rect(Bitmap1-&gt;Width-i,0,Bitmap-&gt;Width,Bitmap1-&gt;Height); 

          <br>

          <br>

             Form1-&gt;Canvas-&gt;CopyRect(Dest1,Bimap1-&gt;Canvas,Source1); <br>

          <br>

             Form1-&gt;Canvas-&gt;CopyRect(Dest2,Bitmap1-&gt;Canvas,Source2); 

          <br>

          <br>

             for(j=0;j&lt;10000;j++); <br>

          <br>

             } <br>

          <br>

            } <br>

          <br>

            5、在Items3的OnClieck事件中添加如下代码: <br>

          <br>

            void__fastcall TForm1::Item3Click(TObject *Sender) <br>

          <br>

            {           //图像从中间往上下分出// <br>

          <br>

            Form1-&gt;Refresh( ); <br>

          <br>

             HeightHAlf=Bittmap1-&gt;Height/2+Bitmap1-&gt;Height%2; <br>

          <br>

             for(i=0;i&lt;=HeightHalf;i++) <br>

          <br>

             { <br>

          <br>

             Dest1=Rect(0,HeightHalf-i,Bitmap1-&gt;Width,HeightHalf); <br>

          <br>

             Source1=Rect(0,0,BmpHandle-&gt;Width,i); <br>

          <br>

             Dest2=Rect(0,HeightHaf,Bitmap1-&gt;Width,HeightHalf+i); <br>

          <br>

             Source2=Rect(0,Bitmap1-&gt;Height-i,Bitmap1-&gt;Width,Bitmap1-&gt;height); 

          <br>

          <br>

             Form1-&gt;Canvas-&gt;CopyRect(Dest1,BmpHandle-&gt;Canvas,Source1); 

          <br>

          <br>

             Form1-&gt;Canvas-&gt;CopyRect(Dest2,BmpHandle-&gt;Canvas,Source2); 

          <br>

          <br>

             for(j=0;j&lt;10000;j++); <br>

          <br>

             } <br>

          <br>

            } <br>

          <br>

            6、在Items4的OnClieck事件中添加如下代码: <br>

          <br>

            void__fastcall TForm1::Item4Click(TObject *Sender) <br>

          <br>

            {                 //图像从上下往中间合进// <br>

          <br>

            Form1-&gt;Refresh( ); <br>

          <br>

             HeightHalf=Bitmap1-&gt;Height/2+Bitmap1-&gt;Height%2; <br>

          <br>

             for(i=0;i&lt;=HeightHalf;i++) <br>

          <br>

             { <br>

          <br>

             Dest1=Rect(0,0,Bitmap1-&gt;Width,i); <br>

          <br>

             Source1=Rect(0,HeightHalf-i,Bitmap1-&gt;Width,HeightHalf); <br>

          <br>

             Dest2=Rect(0,Bitmap1-&gt;Height-i, <br>

          <br>

                   Bitmap1-&gt;Width,Bitmap1-&gt;Height); <br>

          <br>

             Source2=Rect(0,HeightHalf,Bitmap1-&gt;Width,HeightHalf+i); <br>

          <br>

             Form1-&gt;Canvas-&gt;CopyRect(Dest1,Bitmap1-&gt;Canvas,Source1); 

          <br>

          <br>

             Form1-&gt;Canvas-&gt;CopyRect(Dest2,Bitmap1-&gt;Canvas,Source2); 

          <br>

          <br>

             for(j=0;j&lt;10000;j++); <br>

          <br>

             } <br>

          <br>

            } <br>

          <br>

            7、在Items5的OnClieck事件中添加如下代码: <br>

          <br>

            void__fastcall TForm1::Item5Click(TObject *Sender) <br>

          <br>

            {                        //图像从左移入// <br>

          <br>

             Form1-&gt;Refresh( ); <br>

          <br>

            for(i=Bitmap1-&gt;Width;i&gt;=0;i--) <br>

          <br>

             { <br>

          <br>

             Dest1=Rect(0,0,Bitmap1-&gt;Width-i,Bitmap1-&gt;Height); <br>

          <br>

             Source1=Rect(i,0,Bitmap1-&gt;Width,Bitmap1-&gt;Height); <br>

          <br>

             Form1-&gt;Canvas-&gt;CopyRect(Dest1,Bitmap1-&gt;Canvas,Source1); 

          <br>

          <br>

             for(j=0;j&lt;10000;j++); <br>

          <br>

             } <br>

          <br>

            } <br>

          <br>

            8、在Items6的OnClieck事件中添加如下代码: <br>

          <br>

            void__fastcall TForm1::Item6Click(TObject *Sender) <br>

          <br>

            {                        //图像从右移入// <br>

          <br>

             Form1-&gt;Refresh( ); <br>

          <br>

            for(i=0;i&lt;=Bitmap1-&gt;Width;i++) <br>

          <br>

             { <br>

          <br>

             Dest1=Rect(Bitmap1-&gt;Width-i,0,Bitmap1-&gt;Width, <br>

          <br>

                   Bitmap1-&gt;Height); <br>

          <br>

             Source1=Rect(0,0,i,Bitmap1-&gt;Height); <br>

          <br>

             Form1-&gt;Canvas-&gt;CopyRect(Dest1,Bitmap1-&gt;Canvas,Source1); 

          <br>

          <br>

             for(j=0;j&lt;10000;j++); <br>

          <br>

             } <br>

          <br>

            } <br>

          <br>

            9、在Items7的OnClieck事件中添加如下代码: <br>

          <br>

            void__fastcall TForm1::Item7Click(TObject *Sender) <br>

          <br>

            {                       //图像从上移入// <br>

          <br>

            Form1-&gt;Refresh( ); <br>

          <br>

            for(i=0;i&lt;=Bitmap1-&gt;Height;i++) <br>

          <br>

             { <br>

          <br>

             Dest1 =Rect(0,0,Bitmap1-&gt;Width,i); <br>

          <br>

             Source1 =Rect(0,Bitmap1-&gt;Height-i,Bitmap1-&gt;Width,Bitmap1-&gt;Height); 

          <br>

          <br>

             Form1-&gt;Canvas-&gt;CopyRect(Dest1,Bitmap1-&gt;Canvas,Source1); 

          <br>

          <br>

             for(j=0;j&lt;10000;j++); <br>

          <br>

             } <br>

          <br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -