• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 67  文章 - 171  trackbacks - 0
            <2013年4月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            常用鏈接

            留言簿(10)

            隨筆分類(lèi)

            隨筆檔案

            連接資料

            最新隨筆

            搜索

            •  

            最新隨筆

            最新評(píng)論

            在Form上添加一個(gè)OpenPictureDialog,添加一個(gè)Image,并為其添加一個(gè)圖片。再加一個(gè)PopupMenu,并創(chuàng)建兩個(gè)菜單項(xiàng),一個(gè)是Open1,一個(gè)是Exit1,其中前者是打開(kāi)圖象文件對(duì)話框,后者為退出程序。設(shè)置Image1的PopupMenu屬性為PopupMenu1。

            在Form1的OnCreate事件中添加:
            void __fastcall TForm1::FormCreate(TObject *Sender)
            {
              BmpToRgn();
            }

            在.h文件中的private段中添加
                    void __fastcall TForm1::BmpToRgn();

            這個(gè)函數(shù)用來(lái)創(chuàng)建不規(guī)則窗體。
            //---------------------------------------------------------------------------
            void __fastcall TForm1::BmpToRgn()
            {
              Image1->AutoSize=true;
              Form1->AutoSize=true;
              Form1->BorderStyle=bsNone;  //將Form的標(biāo)題欄去掉
              TColor ColorKey=Image1->Canvas->Pixels[0][0];  //以這個(gè)點(diǎn)的顏色為透明基準(zhǔn)色
              int x,y;
              int l,r;
              POINT *a;
              bool lb,rb;
              HRGN wndrgn,temprgn;

              if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL)
              {
                ShowMessage("申請(qǐng)內(nèi)存失敗!");
                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);
            }

            為了使沒(méi)有標(biāo)題欄的窗體能移動(dòng),需要在Image1的OnMouseDown事件中添加以下代碼:
            void __fastcall TForm1::Image1MouseDown(TObject *Sender,
                  TMouseButton Button, TShiftState Shift, int X, int Y)
            {
              if(Button == mbLeft)
              {
                ReleaseCapture();
                Perform(WM_NCLBUTTONDOWN,HTCAPTION, 0);
              }
            }

            //---------------------------------------------------------------------------
            //通過(guò)右鍵菜單中的Exit1退出程序
            void __fastcall TForm1::Exit1Click(TObject *Sender)
            {
              Close();        
            }

            //---------------------------------------------------------------------------
            //打開(kāi)圖片文件,并以這個(gè)圖片創(chuàng)建不規(guī)則窗體
            void __fastcall TForm1::Open1Click(TObject *Sender)
            {
              if(OpenPictureDialog1->Execute())
              {
                Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
                BmpToRgn();
              }
            }
            注意圖片的背景色要相同。
            posted on 2008-08-18 18:19 cpsprogramer 閱讀(1815) 評(píng)論(2)  編輯 收藏 引用 所屬分類(lèi): VC++

            FeedBack:
            # re: 創(chuàng)建位圖型不規(guī)則窗體(可透明,可移動(dòng)) 2008-08-24 16:08 dell電腦
            記得早期創(chuàng)建不規(guī)則窗體,真是頭大。  回復(fù)  更多評(píng)論
              
            # re: 創(chuàng)建位圖型不規(guī)則窗體(可透明,可移動(dòng))[未登錄](méi) 2009-07-30 23:39 vfdff
            代碼哪里編譯的 ??  回復(fù)  更多評(píng)論
              
            一本大道加勒比久久综合| 久久无码AV中文出轨人妻| 久久精品一区二区三区不卡| 久久精品国产亚洲综合色| 久久精品国产WWW456C0M| 久久久亚洲裙底偷窥综合 | 精品久久久久久无码中文野结衣 | 亚洲午夜久久久久久噜噜噜| 久久se精品一区精品二区| 久久国产香蕉一区精品| 久久综合给合久久狠狠狠97色| 久久综合亚洲色HEZYO社区 | 亚洲综合久久综合激情久久| 久久久久亚洲精品日久生情 | 久久精品国产日本波多野结衣| 丁香狠狠色婷婷久久综合| 亚洲国产成人乱码精品女人久久久不卡 | 亚洲国产精品一区二区久久hs| 超级碰久久免费公开视频| 久久亚洲精品成人AV| 亚洲欧美一区二区三区久久| 狠狠色丁香婷婷综合久久来| 亚洲AV无码久久| 久久久高清免费视频| 人妻少妇精品久久| 久久影院久久香蕉国产线看观看| 国产精品久久久久久福利漫画 | 伊人热人久久中文字幕| 久久国产精品无码HDAV| 久久久久亚洲av无码专区喷水 | 亚洲国产成人久久笫一页| 久久AⅤ人妻少妇嫩草影院| 99久久精品国产综合一区| 国内精品久久久久影院免费| 久久香蕉超碰97国产精品 | 狠狠色丁香久久婷婷综合| 老男人久久青草av高清| 日本强好片久久久久久AAA| 久久久久成人精品无码中文字幕| 国内精品人妻无码久久久影院导航 | 精品熟女少妇AV免费久久|