

多年Java開發(fā)從業(yè)者:首先,這個問題主要問:自學Java編程技術,如果才 能找到一份Java編程的工作。按照現(xiàn)在的招聘標準來看,無論你去哪個公司面試,你只需要滿足他們公司的需求就可以。
找到一份Java編程工作需要掌握的內(nèi)容如下 :
首先是Javase作為Java**基本的學習 內(nèi)容,不在多說。
然后是掌握Java的基本原理,因為做Java 編程開發(fā)必須學會Java,用到Java非常多,但是現(xiàn)在很多公司是不用去寫原生的Java,但是如果你想成為一個厲害的Java開發(fā)者,Java必須從理論到實 際操作中都要非常得心應手。
現(xiàn)在公司是必須要求會用框架的,所以取代Java的就是jQuery,這是一個非 常簡易的框架,學jQuery的時候你就會覺得它比Java好用的多。所以jQuery是你必須掌握的。
還有必須學一些框架,比如SpringMVC、Spring、Mybatis、Struts、Hibernate等等,這些就會難理解一些,但是公司是需要要求你會框架的,目前國內(nèi)的公司應用SSH比 較多,建議至少學三個框架,這是找到工作的基本需求。
數(shù)據(jù)庫技術是Java工作者必須掌握的技能常用就是Mysql。
Javaweb的內(nèi)容還有html、css、jsp、Servlet等技術,這些都是現(xiàn)在找Java開發(fā)必須掌握的東西。
以上就是粗略的必須掌握的技術,如果你想找到一份Java開發(fā)的工作,上述 相關技術必須熟練掌握并且應用到項目中。
Java課程介紹 :
Java企 業(yè)級應用
“就業(yè)班”
一階段 Java語言核心
第二階段 數(shù)據(jù)庫及Web前端技術
第三階段 Java Web開發(fā)及服務端 框架
第四階段 綜合項目實踐
Java課程介紹
Java企業(yè)級應用
“就業(yè)班”
一階段 Java語言核心
二階段 數(shù)據(jù)庫及Web前端技術
三階段 Java Web開發(fā)及服務端框架
四階段 綜合項目實踐
Java互聯(lián)網(wǎng)開發(fā)
“培優(yōu)班”
一階段 Java語言核心
二階段 Java Web服務端技術
三階段 Java Web框架及互聯(lián)網(wǎng)架構
四階段 Java互聯(lián)網(wǎng)架構
職場華麗轉(zhuǎn)身
“才高班”
大數(shù)據(jù) 互聯(lián)網(wǎng)大牛班
6大實訓項目
“愛逛網(wǎng)”電商后端數(shù)據(jù)平臺
培訓經(jīng)驗=就業(yè)經(jīng)驗
“培優(yōu)班”
一階段 Java語言核心
第二階段 Java Web服務端技術
第三階段 Java Web框架及互聯(lián)網(wǎng)架構
第四階段 Java互聯(lián)網(wǎng)架構
職場華麗轉(zhuǎn)身
“才高班”
大數(shù)據(jù) 互聯(lián)網(wǎng)大牛班
6大實訓項目
“愛逛網(wǎng)”電商后端數(shù)據(jù)平臺
培訓經(jīng)驗=就業(yè)經(jīng)驗
在windows上創(chuàng)建完美的不規(guī)則窗口
>
在windows上創(chuàng)建完美的不規(guī)則窗口
不規(guī)則窗口方法簡介
windows
上的窗口絕大多數(shù)是方形的,但是偶爾也會有一些其他形狀的窗口,如圓形甚至不規(guī)則形狀。這些不常見的窗口是如何做出來的呢?
有兩種方法可以創(chuàng)建不規(guī)則窗口
1、windows
在很早的時代就支持不規(guī)則形狀的窗口了。windows
提供了SetWindowRgn
函數(shù)來設置窗口的區(qū)域,還提供了一些函數(shù)來創(chuàng)建橢圓、圓角矩形區(qū)域,還可以自己繪制區(qū)域,但是這種方法有個缺陷,曲線的邊緣有嚴重的鋸齒。
2、使用windows2000
以后提供的透明窗口方法來創(chuàng)建不規(guī)則形狀的窗口。當透明窗口的透明部分的透明度為0的時候次部分就會完全透明,鼠標也可以穿透。所以只要制造出有不規(guī)則的完全透明區(qū)域的窗口后,就可以形成不規(guī)則窗口。
而且可以**邊緣抗鋸齒來實現(xiàn)平滑的窗口邊緣,消除鋸齒。
本文主要講的就是第二種方法。
透明窗口API詳解
之前已經(jīng)有一篇文章介紹了簡單的透明窗口使用vc
創(chuàng)建windows
透明窗口,一些基礎內(nèi)容就不在贅述,請自行閱讀。
此次主要用到上一篇文章中沒有詳細說明的UpdateLayeredWindow
函數(shù),UpdateLayeredWindow
函數(shù)的透明和其他的透明方式不太一樣,一旦使用UpdateLayeredWindow
函數(shù)就不能再使用其他的透明函數(shù),
而且窗口的繪制也完全被UpdateLayeredWindow
接管,此時正常的繪圖都不再生效,必須**UpdateLayeredWindow
來刷新窗口的界面。
要使用UpdateLayeredWindow
刷新窗口,首先要建立一個內(nèi)存dc
,然后在dc
上畫圖,在**UpdateLayeredWindow
將dc
上的內(nèi)容根據(jù)參數(shù)做透明處理然后刷新界面。
UpdateLayeredWindow
有9個參數(shù)。
**個參數(shù)是要刷新的窗口句柄,第二個是要刷新的窗口的 dc
,這個參數(shù)通??梢詡?code>NULL,會自動從**個參數(shù)的窗口句柄代表的窗口中去獲取。
第三個參數(shù)是你要刷新的區(qū)域的左上坐標點,如果是全屏也可以傳NULL
,第四個參數(shù)是刷新區(qū)域的長寬,不能傳NULL
。
第五個參數(shù)就是畫好圖的內(nèi)存dc
了,第六個參數(shù)是內(nèi)存dc
上刷新過去的區(qū)域的左上坐標點。
第七個參數(shù)和第八個參數(shù)就是控制透明處理的參數(shù),第七個參數(shù)設置透明色,也就是這種顏色的區(qū)域全部透明,第八個參數(shù)是設置整體透明度。
第九個參數(shù)控制是第七個參數(shù)還是第八個參數(shù)生效或者都生效。
此處要說明一下第八個參數(shù)設置的整體透明度,他只是在原有的顏色上按照參數(shù)里的比例做透明處理,如果內(nèi)存dc
里的一塊區(qū)域顏色本身就是全透明的,那么無論怎么設置參數(shù)這里依然是全透明的。
制造透明區(qū)域
使用透明窗口來制造不規(guī)則窗口的關鍵就在于怎樣制造出包含透明區(qū)域的內(nèi)存dc來。
外部作圖
眾所周知,png
是支持透明通道的一種圖片格式,所以只要提前做好png
透明圖片,然后運行時加載到內(nèi)存dc上就行了,是不是簡單爆了。
實時繪圖
如果能用圖片那是**好啦,但是有時候如果窗口的形狀要經(jīng)常變化而且形態(tài)非常多的話,就不能**外部圖片了。只能在內(nèi)存中畫出dc
的圖來。 gdi
中的顏色支持了透明色,但是這種透明色指的是畫刷畫圖的時候和背景色做透明,**終畫在dc
上還是不透明的,并不能達到我們要的效果。那么怎么辦呢?只能使出終極辦法:
直接修改內(nèi)存中的顏色數(shù)據(jù)。也就是將要透明的區(qū)域先用一種特別的顏色填充好,然后遍歷內(nèi)存中的顏色數(shù)據(jù),將這個顏色的內(nèi)存數(shù)據(jù)強行修改為完全透明-——將ARGB
的代表A
通道的字節(jié)置零。
由于內(nèi)存dc
并不支持遍歷內(nèi)存數(shù)據(jù),所以一般是建立一個位圖,然后在這個位圖上畫圖標記處需要透明的位置,**后遍歷位圖內(nèi)存,將需要透明的位置全部摳掉。托cpu進步的福,我摳一副1080p的圖瞬間就可以完成。然后把位圖畫到dc
上去。
這里有一個小問題,因為位圖中有透明顏色,上次在dc
畫圖的時候這部分會遺留下來干擾到下次繪圖,所以要每次重畫之前把dc
內(nèi)容用其他顏色給填掉。
**后就是鋸齒的問題了。如果要抗鋸齒的話就要再做一個特殊處理,首先得明白抗鋸齒的原理,可以Jan之前我寫過的gdi 的畫圖抗鋸齒原理。
用gdi
畫出抗鋸齒的圖后,然后在遍歷的時候?qū)ふ夷切┯蓛煞N顏色混合成的顏色,然后根據(jù)混合的比例相應的轉(zhuǎn)換成半透明度設置到這個像素點。通常我用白色和黑色做前景色和背景色,這樣混合變成灰色,灰色的rgb
值除以白色rgb
值的比例就是半透明度。
**后將這樣一幅位圖畫到dc
上,用UpdateLayeredWindow
函數(shù)刷新到窗口上就會形成不規(guī)則的窗口了。
代碼示例
畫出要被扣掉的關鍵色區(qū)域位圖的代碼:
void SpotlightWindow::DrawMaskImage(Bitmap * pImage) { Graphics graphics(pImage); graphics.FillRectangle(m_pBlackBrush, 0, 0, m_windowRect.Width(), m_windowRect.Height()); graphics.SetSmoothingMode(Gdiplus::SmoothingMode::SmoothingModeAntiAlias); graphics.FillEllipse(m_pKeyBrush, m_ellipseRect.left, m_ellipseRect.top, m_ellipseRect.Width(), m_ellipseRect.Height()); graphics.Flush(Gdiplus::FlushIntentionSync); }遍歷摳掉透明區(qū)域并對邊緣做半透明處理的代碼:
void SpotlightWindow::MakeTransparentImage(Bitmap * pImage) { Gdiplus::Rect rect(0, 0, pImage->GetWidth(), pImage->GetHeight()); Gdiplus::BitmapData bmpData; pImage->LockBits(&rect, Gdiplus::ImageLockModeWrite | Gdiplus::ImageLockModeRead, PixelFormat32bppARGB, &bmpData); int width = pImage->GetWidth(); int height = pImage->GetHeight(); int stride = bmpData.Stride; unsigned int *pData = reinterPRet_cast<unsigned int *>(bmpData.Scan0); for (int y = 0; y < height; y ) { for (int x = 0; x < width; x ) { unsigned int color = *pData; if (color == WHITE_COLOR) { *pData = TRANSPARENCY_WHITE_COLOR;//設為透明色 } else if (color != BLACK_COLOR) { *pData = TransportTransparentColor(color);//根據(jù)計算結(jié)果設為把半透明顏色 } pData; } } pImage->UnlockBits(&bmpData); }計算半透明的代碼:
unsigned int SpotlightWindow::TransportTransparentColor(unsigned int color) { //像素顏色數(shù)據(jù) unsigned char * pArgb = reinterpret_cast<unsigned char *>(&color); //換算出的透明度 unsigned char transparency = MAX_COLOR-*pArgb; //新的像素顏色 unsigned int transparencyColor = BLACK_COLOR; pArgb = reinterpret_cast<unsigned char *>(&transparencyColor); //設置新的像素顏色的透明度 pArgb[TRANSPARENCY_INDEX] = transparency; return transparencyColor; }
將透明圖片畫到dc
上并刷新到窗口上的代碼:
相關推薦:
體驗課預約試聽
倒計時
課程熱線:
客服在線時間:早上9點~下午6點,其他時間請在線預約報名或留言,謝謝!