操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    我們生活在一個分辨率爆炸和娛樂至上的時代,每一天都有成千上萬的影像產出,隨著5G的即將鋪開,視頻必將成為主流傳播的媒體,我們也逐漸習慣用以影像為核心的手機記錄生活,也在更優秀的播放終端上看分辨率更高的片子,回想這十年,到底發生了什么。分辨率從VCD的352 * 240到家用電視支持4K,去組建家庭影院看大片,又將大部分時間投入給抖音、快手的540x960分辨率。

    4k將給我們帶來什么?更清晰的畫質,一部平庸的作品鍍金,重制經典電影還是看過之后再也回不去的視頻感受,本文將通過三個不沖突的時光軸,帶著大家一起回憶我們的“看片”進化史,一起回憶古惑仔、PS2、電腦、迅雷、愛情動作片帶給我們的無限快樂和快感。

    “看片”之光盤時代

    光盤時代“看片”,以播放機解碼,連接電視來播放,畢竟那個時代個人PC還未普及,手機還只能滿足通話、短信等基本功能,家庭娛樂方式還只是大頭電視,在娛樂單一的年代,能自主選擇的“看片”方式基本上有且僅有家庭播放機了。“看片”之光盤時代興起于娛樂單一的年代,隨著個人PC和移動終端的普及和發展,基本已經成了電影收藏愛好者的小眾了。

    VCD,分辨率:352 * 240(1992年—1999年)

    VCD,是Video Compact Disc的縮寫,VCD使用的也是CD光碟,容量大小與CD相當,

    用,通過MPEG-1壓縮編碼來壓縮,解析度到達352 * 240﹙NTSC﹚或352 * 288﹙PAL﹚,雖大的視頻流是1.15Mbps,聲音格式則采用44.1KHz取樣頻率,16 Bit取樣值,播放出來的整個視頻質量和VHS錄像帶相當。MPEG-1壓縮編碼技術讓容量有限的 CD 中存入占用空間更大的視頻文件,讓存儲影片的戒指從錄像帶變換成為了CD光盤。

    正是由于VCD出現時,電腦還沒能普及到家家戶戶,VCD需要播放機來播放,就像當年的錄像帶一樣,國人生產了VCD播放機,這也算是的高光時刻。伴隨而來的,“租碟”業務多了起來。


    回想自己,小伙伴們去湊湊錢,中午放棄秀氣去VCD放映廳偷偷看《古惑仔》,那時候還是大頭電視,或者偷偷出去3元一小時去玩的索尼PS游戲機,用的也是CD光盤。VCD真的承載了80后一代“看片”和娛樂的無數回憶。

    DVD,分辨率:720×480(1996—2005)

    DVD全稱是“Digital Video Disc”也有稱為“Digital Versatile Disc”,不管怎么稱呼,都離不開“數字”的字樣,DVD可以看作是VCD的升級版,在面積幾乎同樣大小的光盤上,存儲容量從600多MB升級到了4.3GB。DVD分別采用MPEG-2技術和AC-3標準對視頻和音頻信號進行壓縮編碼,可以記錄135分鐘的圖像,畫面分辨率為720×480,碼率達到10Mbps,也就是說,DVD可存儲的視頻分辨率比VCD提高了四倍多,音效質量也有所提高,并支持外掛的字幕和聲道。

    在實際生活中,VCD容量系限制了影片的質量,相比之下,DVD帶來容量的同時也帶來了影片更大的信息量,但對于國人來說,光盤看片時代的輝煌不得不說還是VCD時代,VCD播放機價格便宜,普及率高,“看片”成本極低。再后來DVD播放機、平板電視和等離子電視,以及家用PC的普及讓DVD“看片”時代也火了起來。

    冷知識:索尼PS2使用的就是DVD光盤作為存儲介質,作為一款家用游戲機,自帶了DVD播放器,價格比DVD播放器便宜不少,你有沒有跟父母說PS2是DVD播放器,來“說服”自己的父母購買PS2呀。

    你要說DVD承載的720×480分辨率過時了么?其實沒有,選擇很多網絡的小視頻都是等于或者低于這個分辨率的,放在手機屏幕上,看著也還可以。

    BD(2006年—至今)大戰HD DVD(2003—2008),分辨率:2K-4K

    DVD時代,是個人PC硬件發展告訴發展的時代,很多影像大廠經歷了VCD、DVD標準者之后,知道必將有一個標準和技術超過DVD成為新的存儲介質,也許他們沒有預測到硬盤會快速擴容降價,也許他們也沒有預測到互聯網提速來得這么快。

    日本的兩大本土公司想到一塊去了,都想成為下一代光盤的制定者(是不是有點類似如今的5G之爭),索尼的BD(藍光)和東芝的HD-DVD(高清DVD),簡單的說容量不同,藍光是25GB,HD-DVD是15GB,本來兩家還能對抗一下,但由于某些市場的支持,東芝被迫終止HD DVD事業,我們現在能買到的收藏到的電影光盤,就是藍光制式的了。藍光光盤的容量一般可達到25-50G,這一巨大容量為高清電影的存儲帶來了方便,一般情況下,藍光電影的分辨率可達1080p(1920x1080)。目前已經有4K規格(3840x2160)的藍光電影光盤銷售。(引用自百度百科)

    我們實際生活中用藍光BD或者HD-DVD光盤“看片”還是少了一些,原因是互聯網提速和個人PC興起,讓我們用再買一個播放機來播放這類光盤了。另外,冷知識,索尼PS3支持的就是藍光BD,當然索尼還是想如法炮制PS2的輝煌,通過PS新主機發布來進一步推廣BD,微軟的第2代家用游戲主機xbox 360支持的是HD-DVD。

    “看片”之電腦播放時代

    個人PC電腦的普及,互聯網從撥號變成寬帶,讓電腦在線播放成為可能,細數十年前,前,其實已經早已進入互聯網在線“看片”的年代了,PPlive、PPS、風行在線播放很流暢,優酷和土豆還不是一家,迅雷還能什么都下載得到,快播還活在我們生活中。

    基于P2P的在線視頻軟件(2004—2010)

    早起我們用的PPLive、PPS、風行視頻播放軟件,其實是基于P2P(點對點)技術開發的軟件,也可以說P2P是一種加速技術,簡單的說,就是讓每個使用的客戶端都能提供資源,包括帶寬,存儲空間和計算能力,讓視頻在線播放不卡頓。

    這類軟件其實就是互聯網上大規模視頻播放的共享軟件,通過P2P技術有效解決了當前網絡視頻點播服務的帶寬和負載有限問題,實現用戶越多,播放越流暢的特性。回想2005年的超級女聲決賽期間,在PPlive上觀看湖南衛視的有上萬觀眾,至于快播就不說了哈。

    06年上大學,家里給買了一個聯想的酷睿雙核第一代的筆記本,后來我用它一邊窗口化玩跑跑卡丁車,一邊用PPlive小窗口右下角看電影,那時候還沒有什么版權不版權,點什么看什么。

    BT、磁力鏈接、迅雷等下載(2003年—至今)

    剛剛提到了早期P2P視頻播放軟件,談到BT真的是無所不知道,BT技術讓玩高清、燒高清成為現實,其實BT、磁力鏈下載也是基于P2P的一種共享下載方式,BT是BitTorrent的簡稱,BT是一種文件分發協議,一個文件的下載者們下載的同時也在不斷互相上傳數據,磁力鏈接,簡單的說以"magnet:?xt=urn:btih:"開頭的字符串,就是一條磁力鏈接(你敢說第一個BT種子不是下載大姐姐嘛~)。

    這里不得不提迅雷,因為迅雷將P2P技術優勢發揚光大,其實不應該吧迅雷和BT、磁力鏈接放在并列說,畢竟迅雷是一個下載軟件,BT和磁力鏈接可以算作協議,迅雷也可以下載BT種子和磁力鏈接。迅雷超越傳統HTTP/FTP下載工具(網際快車)也稱為必然,當時,還有很多類似迅雷的下載軟件,提幾個你們記得么,QQ旋風、VeryCD、電驢等等。冷知識:網際快車的大佬侯延堂因為迷戀魔獸世界,軟件停更了一年,下載速度和用戶體驗都在下降,最后你懂的。另外一個我想提一下vagaa,還有記得這個軟件的嘛。

    回想,我們用迅雷,下載了多少電影,觀看了多少愛情片、動作片和愛情動作片,認識了多少大姐姐,讓我們學會了多少姿勢,是知識,反正我的硬盤是滿了。

    但這類軟件最后還是沒落了,有的CEO甚至被判刑了,原因1:盜版電影代名詞,這種下載方式不用給廠商版權費,用戶之間互相共享;原因2:“黃色”資源法外之地,下載方式很難對內容進行監管,所以大姐姐不知不覺的就來了;原因3:太占太寬,上網吧的時候,有沒有偷偷掛迅雷或者電驢,然后被罵,誰TMD掛迅雷呢,占我網速,你懂的。這種P2P下載變成了高清發燒友下載資源的小眾下載方式。

    “看片”終結免費模式,優酷、騰訊、愛奇藝“三足鼎立”(2012—至今)

    記得迅雷鼎盛時期,優酷和土豆視頻流媒體還在對立,并且都未盈利,經常看著看著就卡了,騰訊還未涉足視頻,不過那時候真的沒有廣告。隨著人們越來越重視版權,國家監管也越來越嚴格,P2P在線視頻播放軟件帶頭沒落,P2P下載軟件也自檢自查也讓人們改變了下載免費“看片”的習慣。

    這個時候,互聯網提速到了一個好的時代,在線視頻播放軟件也不再卡頓,各大視頻網站都盯住了版權這塊蛋糕,從免費到會員、從廣告到會員廣告,從會員到會員付費,我們開始還電影票了,逐漸形成了優酷、騰訊、愛奇藝“三足鼎立”的局面。

    這里有一個好消息一個壞消息,隨著在線視頻播放技術的發展,在線播放已經支持HDR、4K(別管真假4K,至少清晰啦)、杜比等音視頻技術,加之我們的電腦顯示器分辨率、顯示效果越來越好,價格越來越低,“看片”更加清晰、更加爽快了。快消息是你的觀看設備可能還打不到2k呢。

    “看片”之移動終端

    從家用播放機到個人PC電腦,我們看片的終端也在變化,當年喬布斯拿著iPad走上舞臺,質疑聲很大,人們不知道iPad存在的意義,然而蘋果催生出來平板電腦也真正的打開了市場,一句“買前生產力,買后愛奇藝”道出了我們躺在床上用平板看片的快樂。然而,隨著手機屏幕越來越大,平板電腦的市場越來越萎縮,直到今日,京東首頁很難再找到華為、蘋果、微軟以外的平板電腦了,零星能看到酷比魔方、臺電、聯想等品牌。

    手機(2004—至今)

    回想起手機看片,印象很深,記得那時候是高中,省吃儉用買了一個諾基亞6600“胖6”,176×208的屏幕分辨率,在塞班論壇下載別人分享出來的3gp格式的,176×208分辨率的電影和愛情動作片,然后上課的時候偷偷的在書本后面“看片”,別提有多神氣了。再后來換了諾基亞N93i,分辨率提升到了240×320,但仍然沒有改變在論壇下載后再倒入內存卡的宿命。

    后來大學快畢業了,買了一臺魅族m8,屏幕大小來到了3.4英寸,分辨率一下飆升到了480×720,要知道同期發布的iPhone 3Gs是3.5英寸屏幕,分辨率也只有480×320,從未有過的電容屏觸控和高分辨率,更加方便的直連電腦,windows ce系統讓魅族m8能夠解碼更多格式的電影,也能下載到在線視頻軟件了,在大學寢室,我用魅族m8連接wifi就可以“看片”,這種體驗真的變化超級大。

    時間來到了智能時代,我用過太多的手機,微軟的、安卓的、IOS的,短短7-8年,手機技術突飛猛進,到了當下,我也正手握iPhone 11,寫下這篇文章。全面屏讓手機更加同質化,但不得不說,讓我們的屏幕更大更清晰,那邊sony手機賣的不咋地,但早早的除了2k屏手機,這頭蘋果iPhone 4先提出視網膜屏幕,那頭三星頂級oled屏幕不挺炫技……我們何嘗不是開始在手機上用著優酷、騰訊、愛奇藝“看片”。

    平板電腦(2010—至今)

    “買前生產力,買后愛奇藝”,誠實的跟我說,你的平板是不是“看片最多”,我承認,我買第一代ipad的時候,就是當時在安卓平板上用瀏覽器看優酷啥的很費勁,在商場直接點開Safari就能看優酷,還能全屏。

    最早用ios系統并不是iPhone而是iPad,畢竟那個時候iPhone還沒有魅族那么吸引我(其實是窮),iPad也一直追著買,出了更小的mini開始更新mini,拿著更便利,直到手機屏幕愈來越大,我的iPad mini也放在角落吃灰了。

    總結向

    巡禮我們的“看片”進化史,可以看作是CD -> VCD -> DVD -> BD 的光盤進化史,也可以看作是480p -> 720p -> 1080p -> 2k -> 4k的進化史,還可以看作是家用播放機+電視機 -> 個人PC帶腦 -> 平板電腦、手機的進化史。而如今播放技術已經達到 4k甚至8k,但又有多少人家里有4K電視卻未真正看過真4k的片源,認為優酷、騰訊、愛奇藝在線播放的就是真4k了。

    寫這篇文章的時候,我的內心一直是糾結的,人們總是自相矛盾,分辨率不行的時候我們不停的追求分辨率,當分辨率達到一定水準時我們又在追求移動終端“看片”的便利性,有著大好片源不看,卻窩在手機里刷快手和抖音,也許正是網速、硬件、手機的發展撕碎了我們每個人的時間,碎片化時間的同時也碎片化了每個人。

    但反過來想,無論是哪一個“看片”進化史,都承載著我們“看片”時無數的回憶,回憶最重要的也許不是看什么片和用什么看片,而是陪著我們一起“看片”的人,以及之后的分享。這樣想,我們只要追求共同的愛好,享受十年來科技進步帶來的進步就好,同時,也容許又一小部分人,組建家庭影院,沉寂在自己的小世界里和愛人一起“看片”吧。

    (參數資料引用自百度百科,部分圖片引用自unsplash,文中時間點為熱點時間)

    前提

    入行已經7,8年了,一直想做一套漂亮點的自定義控件,于是就有了本系列文章。

    本系列文章將講解各種控件的開發及思路,歡迎各位批評指正。

    此系列控件開發教程將全部在原生控件基礎上進行重繪開發,目標的扁平化、漂亮、支持觸屏。

    如果有什么好的建議也可以評論留言來交流。

    源碼地址:

    GitHub:https://github.com/kwwwvagaa/NetWinformControl

    碼云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git

    如果覺得寫的還行,請點個 star 支持一下吧

    歡迎前來交流探討: 企鵝群568015492

    目錄

    http://toutiao.com/item/6824291838963220999/

    準備工作

    前面介紹了那么多控件(雖然重要的文本框還沒有出現),終于輪到窗體上場了

    首先我們需要一個基類窗體,所有的窗體都將繼承基類窗體

    基類窗體需要實現哪些功能呢?

    1. 圓角
    2. 邊框
    3. 熱鍵
    4. 蒙版

    開始

    添加一個Form,命名FrmBase

    寫上一些屬性

      1  [Description("定義的熱鍵列表"), Category("自定義")]
      2         public Dictionary<int, string> HotKeys { get; set; }
      3         public delegate bool HotKeyEventHandler(string strHotKey);
      4         /// <summary>
      5         /// 熱鍵事件
      6         /// </summary>
      7         [Description("熱鍵事件"), Category("自定義")]
      8         public event HotKeyEventHandler HotKeyDown;
      9         #region 字段屬性
     10 
     11         /// <summary>
     12         /// 失去焦點關閉
     13         /// </summary>
     14         bool _isLoseFocusClose=false;
     15         /// <summary>
     16         /// 是否重繪邊框樣式
     17         /// </summary>
     18         private bool _redraw=false;
     19         /// <summary>
     20         /// 是否顯示圓角
     21         /// </summary>
     22         private bool _isShowRegion=false;
     23         /// <summary>
     24         /// 邊圓角大小
     25         /// </summary>
     26         private int _regionRadius=10;
     27         /// <summary>
     28         /// 邊框顏色
     29         /// </summary>
     30         private Color _borderStyleColor;
     31         /// <summary>
     32         /// 邊框寬度
     33         /// </summary>
     34         private int _borderStyleSize;
     35         /// <summary>
     36         /// 邊框樣式
     37         /// </summary>
     38         private ButtonBorderStyle _borderStyleType;
     39         /// <summary>
     40         /// 是否顯示模態
     41         /// </summary>
     42         private bool _isShowMaskDialog=false;
     43         /// <summary>
     44         /// 蒙版窗體
     45         /// </summary>
     46         //private FrmTransparent _frmTransparent=null;
     47         /// <summary>
     48         /// 是否顯示蒙版窗體
     49         /// </summary>
     50         [Description("是否顯示蒙版窗體")]
     51         public bool IsShowMaskDialog
     52         {
     53             get
     54             {
     55                 return this._isShowMaskDialog;
     56             }
     57             set
     58             {
     59                 this._isShowMaskDialog=value;
     60             }
     61         }
     62         /// <summary>
     63         /// 邊框寬度
     64         /// </summary>
     65         [Description("邊框寬度")]
     66         public int BorderStyleSize
     67         {
     68             get
     69             {
     70                 return this._borderStyleSize;
     71             }
     72             set
     73             {
     74                 this._borderStyleSize=value;
     75             }
     76         }
     77         /// <summary>
     78         /// 邊框顏色
     79         /// </summary>
     80         [Description("邊框顏色")]
     81         public Color BorderStyleColor
     82         {
     83             get
     84             {
     85                 return this._borderStyleColor;
     86             }
     87             set
     88             {
     89                 this._borderStyleColor=value;
     90             }
     91         }
     92         /// <summary>
     93         /// 邊框樣式
     94         /// </summary>
     95         [Description("邊框樣式")]
     96         public ButtonBorderStyle BorderStyleType
     97         {
     98             get
     99             {
    100                 return this._borderStyleType;
    101             }
    102             set
    103             {
    104                 this._borderStyleType=value;
    105             }
    106         }
    107         /// <summary>
    108         /// 邊框圓角
    109         /// </summary>
    110         [Description("邊框圓角")]
    111         public int RegionRadius
    112         {
    113             get
    114             {
    115                 return this._regionRadius;
    116             }
    117             set
    118             {
    119                 this._regionRadius=value;
    120             }
    121         }
    122         /// <summary>
    123         /// 是否顯示自定義繪制內容
    124         /// </summary>
    125         [Description("是否顯示自定義繪制內容")]
    126         public bool IsShowRegion
    127         {
    128             get
    129             {
    130                 return this._isShowRegion;
    131             }
    132             set
    133             {
    134                 this._isShowRegion=value;
    135             }
    136         }
    137         /// <summary>
    138         /// 是否顯示重繪邊框
    139         /// </summary>
    140         [Description("是否顯示重繪邊框")]
    141         public bool Redraw
    142         {
    143             get
    144             {
    145                 return this._redraw;
    146             }
    147             set
    148             {
    149                 this._redraw=value;
    150             }
    151         }
    152 
    153         private bool _isFullSize=true;
    154         /// <summary>
    155         /// 是否全屏
    156         /// </summary>
    157         [Description("是否全屏")]
    158         public bool IsFullSize
    159         {
    160             get { return _isFullSize; }
    161             set { _isFullSize=value; }
    162         }
    163         /// <summary>
    164         /// 失去焦點自動關閉
    165         /// </summary>
    166         [Description("失去焦點自動關閉")]
    167         public bool IsLoseFocusClose
    168         {
    169             get
    170             {
    171                 return this._isLoseFocusClose;
    172             }
    173             set
    174             {
    175                 this._isLoseFocusClose=value;
    176             }
    177         }
    178         #endregion
    179 
    180         private bool IsDesingMode
    181         {
    182             get
    183             {
    184                 bool ReturnFlag=false;
    185                 if (LicenseManager.UsageMode==LicenseUsageMode.Designtime)
    186                     ReturnFlag=true;
    187                 else if (System.Diagnostics.Process.GetCurrentProcess().ProcessName=="devenv")
    188                     ReturnFlag=true;
    189                 return ReturnFlag;
    190             }
    191         }

    快捷鍵處理

     1 /// <summary>
     2         /// 快捷鍵
     3         /// </summary>
     4         /// <param name="msg"></param>
     5         /// <param name="keyData"></param>
     6         /// <returns></returns>
     7         protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
     8         {
     9             int num=256;
    10             int num2=260;
    11             bool result;
    12             if (msg.Msg==num | msg.Msg==num2)
    13             {
    14                 if (keyData==(Keys)262259)
    15                 {
    16                     result=true;
    17                     return result;
    18                 }
    19                 if (keyData !=Keys.Enter)
    20                 {
    21                     if (keyData==Keys.Escape)
    22                     {
    23                         this.DoEsc();
    24                     }
    25                 }
    26                 else
    27                 {
    28                     this.DoEnter();
    29                 }
    30             }
    31             result=false;
    32             if (result)
    33                 return result;
    34             else
    35                 return base.ProcessCmdKey(ref msg, keyData);
    36         }
     1 protected void FrmBase_KeyDown(object sender, KeyEventArgs e)
     2         {
     3             if (HotKeyDown !=null && HotKeys !=null)
     4             {
     5                 bool blnCtrl=false;
     6                 bool blnAlt=false;
     7                 bool blnShift=false;
     8                 if (e.Control)
     9                     blnCtrl=true;
    10                 if (e.Alt)
    11                     blnAlt=true;
    12                 if (e.Shift)
    13                     blnShift=true;
    14                 if (HotKeys.ContainsKey(e.KeyValue))
    15                 {
    16                     string strKey=string.Empty;
    17                     if (blnCtrl)
    18                     {
    19                         strKey +="Ctrl+";
    20                     }
    21                     if (blnAlt)
    22                     {
    23                         strKey +="Alt+";
    24                     }
    25                     if (blnShift)
    26                     {
    27                         strKey +="Shift+";
    28                     }
    29                     strKey +=HotKeys[e.KeyValue];
    30 
    31                     if (HotKeyDown(strKey))
    32                     {
    33                         e.Handled=true;
    34                         e.SuppressKeyPress=true;
    35                     }
    36                 }
    37             }
    38         }

    重繪

     1  /// <summary>
     2         /// 重繪事件
     3         /// </summary>
     4         /// <param name="e"></param>
     5         protected override void OnPaint(PaintEventArgs e)
     6         {
     7             if (this._isShowRegion)
     8             {
     9                 this.SetWindowRegion();
    10             }
    11             base.OnPaint(e);
    12             if (this._redraw)
    13             {
    14                 ControlPaint.DrawBorder(e.Graphics, base.ClientRectangle, this._borderStyleColor, this._borderStyleSize, this._borderStyleType, this._borderStyleColor, this._borderStyleSize, this._borderStyleType, this._borderStyleColor, this._borderStyleSize, this._borderStyleType, this._borderStyleColor, this._borderStyleSize, this._borderStyleType);
    15             }
    16         }
    17  /// <summary>
    18         /// 設置重繪區域
    19         /// </summary>
    20         public void SetWindowRegion()
    21         {
    22             GraphicsPath path=new GraphicsPath();
    23             Rectangle rect=new Rectangle(-1, -1, base.Width + 1, base.Height);
    24             path=this.GetRoundedRectPath(rect, this._regionRadius);
    25             base.Region=new Region(path);
    26         }
    27         /// <summary>
    28         /// 獲取重繪區域
    29         /// </summary>
    30         /// <param name="rect"></param>
    31         /// <param name="radius"></param>
    32         /// <returns></returns>
    33         private GraphicsPath GetRoundedRectPath(Rectangle rect, int radius)
    34         {
    35             Rectangle rect2=new Rectangle(rect.Location, new Size(radius, radius));
    36             GraphicsPath graphicsPath=new GraphicsPath();
    37             graphicsPath.AddArc(rect2, 180f, 90f);
    38             rect2.X=rect.Right - radius;
    39             graphicsPath.AddArc(rect2, 270f, 90f);
    40             rect2.Y=rect.Bottom - radius;
    41             rect2.Width +=1;
    42             rect2.Height +=1;
    43             graphicsPath.AddArc(rect2, 360f, 90f);
    44             rect2.X=rect.Left;
    45             graphicsPath.AddArc(rect2, 90f, 90f);
    46             graphicsPath.CloseFigure();
    47             return graphicsPath;
    48         }

    還有為了點擊窗體外區域關閉的鉤子功能

     1  void FrmBase_FormClosing(object sender, FormClosingEventArgs e)
     2         {
     3             if (_isLoseFocusClose)
     4             {
     5                 MouseHook.OnMouseActivity -=hook_OnMouseActivity;
     6             }
     7         }
     8 
     9 
    10         private void FrmBase_Load(object sender, EventArgs e)
    11         {
    12             if (!IsDesingMode)
    13             {
    14                 if (_isFullSize)
    15                     SetFullSize();
    16             }
    17             if (_isLoseFocusClose)
    18             {
    19                 MouseHook.OnMouseActivity +=hook_OnMouseActivity;
    20             }
    21         }
    22 
    23         #endregion
    24 
    25         #region 方法區
    26 
    27 
    28         void hook_OnMouseActivity(object sender, MouseEventArgs e)
    29         {
    30             try
    31             {
    32                 if (this._isLoseFocusClose && e.Clicks > 0)
    33                 {
    34                     if (e.Button==System.Windows.Forms.MouseButtons.Left || e.Button==System.Windows.Forms.MouseButtons.Right)
    35                     {
    36                         if (!this.IsDisposed)
    37                         {
    38                             if (!this.ClientRectangle.Contains(this.PointToClient(e.Location)))
    39                             {
    40                                 base.Close();
    41                             }
    42                         }
    43                     }
    44                 }
    45             }
    46             catch { }
    47         }

    為了實現蒙版,覆蓋ShowDialog函數

     1 public new DialogResult ShowDialog(IWin32Window owner)
     2         {
     3             try
     4             {
     5                 if (this._isShowMaskDialog && owner !=null)
     6                 {
     7                     var frmOwner=(Control)owner;
     8                     FrmTransparent _frmTransparent=new FrmTransparent();
     9                     _frmTransparent.Width=frmOwner.Width;
    10                     _frmTransparent.Height=frmOwner.Height;
    11                     Point location=frmOwner.PointToScreen(new Point(0, 0));
    12                     _frmTransparent.Location=location;
    13                     _frmTransparent.frmchild=this;
    14                     _frmTransparent.IsShowMaskDialog=false;
    15                     return _frmTransparent.ShowDialog(owner);
    16                 }
    17                 else
    18                 {
    19                     return base.ShowDialog(owner);
    20                 }
    21             }
    22             catch (NullReferenceException)
    23             {
    24                 return System.Windows.Forms.DialogResult.None;
    25             }
    26         }
    27 
    28         public new DialogResult ShowDialog()
    29         {
    30             return base.ShowDialog();
    31         }


    設計效果就是這樣的

    用處及效果

    一般來說,這個基類窗體不直接使用,不過你高興用的話 也是可以的 ,比如設計個圓角窗體什么的

    最后的話

    如果你喜歡的話,請到 碼云或Github 點個星星吧

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有