posts - 195, comments - 34, trackbacks - 0, articles - 1

          哈佛館訓(xùn)

           
          1.現(xiàn)在睡覺的話會做夢而現(xiàn)在學(xué)習(xí)的話會讓夢實現(xiàn)
          This moment will nap, you will have a dream; But this moment study, you will interpret a dream.
          2.我無所事事地度過的今天是昨天死去的人們所奢望的明天
          I leave uncultivated today, was precisely yesterdayperishes tomorrow which person of the body implored.
          3.感到晚了的時候其實是最快的時候
          Thought is already is late, exactly is the earliest time.
          4.不要把今天的事拖到明天
          Not matter of the today will drag tomorrow.
          5.學(xué)習(xí)的痛苦是一時的而沒有學(xué)習(xí)的痛苦是一輩子的
          Time the study pain is temporary, has not learned the pain islife-long.
          6.學(xué)習(xí)不是人生的全部但連學(xué)習(xí)都征服不了你還能做什么?
          The study certainly is not the life complete. But, sincecontinually life part of - studies also is unable to conquer, what butalso can make?
          7.學(xué)習(xí)不是因為缺少時間而是缺少努力
          Studies this matter, lacks the time, but is lacks diligently.
          8.所有人的成功都不是偶然的
          Nobody can casually succeed, it comes from the thoroughself-control and the will.郭澧蔥
          9.無法避免的痛苦就去享受吧!
          Please enjoy the pain which is unable to avoid.
          10.早起的鳥兒有蟲吃
          Only has compared to the others early, diligently diligently, canfeel the successful taste.
          11.成功并不屬于每個人
          Nobody can casually succeed
          12.時間在流逝
          HOW time flies
          13.今天流下的口水將變成明天流下的淚水
          Now drips the saliva, will become tomorrow the tear

          posted @ 2008-11-01 22:11 小強摩羯座 閱讀(95) | 評論 (0)編輯 收藏


              從馬思偉那里看過來的,此君不是一般牛人也,其在視頻編碼方面成就令人仰慕,吾若可略有所成,便是萬幸,會感天謝地。

          下在是網(wǎng)站對這個性格測試的說明:

          由美國的心理學(xué)家Katherine Cook Briggs (1875-1968) 和她的心理學(xué)家女兒Isabel Briggs Myers根據(jù)瑞士著名的心理分析學(xué)家Carl G. Jung (榮格)的心理類型理論和她們對于人類性格差異的長期觀察和研究而著成。經(jīng)過了長達50多年的研究和發(fā)展,MBTI已經(jīng)成為了當(dāng)今全球最為著名和權(quán)威的性格測試。

          主要應(yīng)用于職業(yè)發(fā)展、職業(yè)咨詢、團隊建議、婚姻教育等方面,是目前國際上應(yīng)用較廣的人才甄別工具。

          人的性格傾向,就象分別使用自己的兩只手寫字一樣,都可以寫出來,但慣用的那只寫出的會比另一只更好。每個人都會沿著自己所屬的類型發(fā)展出個人行為、技巧和態(tài)度,而每一種也都存在著自己的潛能和潛在的盲點。本次測試主要探討各種性格類型與相關(guān)職業(yè)的匹配程度。

          MBTI傾向顯示了人與人之間的差異,而這些差異產(chǎn)生于:
          – 他們把注意力集中在何處,從哪里獲得動力(外向、內(nèi)向)
          – 他們獲取信息的方式(實感、直覺)
          – 他們做決定的方法(思維、情感)
          – 他們對外在世界如何取向;通過認知的過程或判斷的過程(判斷、知覺)

          用字母代表如下:

          精力支配:外向 E — 內(nèi)向 I

          認識世界:實感 S — 直覺 N

          判斷事物:思維 T — 情感 F

          生活態(tài)度:判斷 J — 知覺 P

          其中兩兩組合,可以組合成16種人格類型。




          我的測試結(jié)果:    

          Psytopic分析:您的性格類型是“ISTJ”(內(nèi)向+實感+思維+判斷)

          沉靜,認真;貫徹始終、得人信賴而取得成功。講求實際,注重事實和有責(zé)任感。能夠合情合理地去決定應(yīng)做的事情,而且堅定不移地把它完成,不會因外界事物而分散精神。以做事有次序、有條理為樂---不論在工作上, 家庭上或者生活上。重視傳統(tǒng)和忠誠。

          ISTJ型的人是嚴肅的、有責(zé)任心的和通情達理的社會堅定分子。他們值得信賴,他們重視承諾,對他們來說,言語就是莊嚴的宣誓。 ISTJ型的人工作縝密,講求實際,很有頭腦也很現(xiàn)實。他們具有很強的集中力、條理性和 準確性。無論他們做什么,都相當(dāng)有條理和可靠。他們具有堅定不移、深思熟慮的思想,一旦他們著手自己相信是最好的行動方法時,就很難轉(zhuǎn)變或變得沮喪。ISTJ型的人特別安靜和勤奮,對于細節(jié)有很強的記憶和判斷。 他們能夠引證準確的事實支持自己的觀點,把過去的經(jīng)歷運用到現(xiàn)在的決策中。他們重視和利用符合邏輯、客觀的分析,以堅持不懈的態(tài)度準時地完成工作,并且總是安排有序,很有條理。他們重視必要的理論體系和傳統(tǒng) 慣例,對于那些不是如此做事的人則很不耐煩。ISTJ型的人總是很傳統(tǒng)、謹小甚微。他們聆聽和喜歡確實、清晰地陳述事物。ISTJ型的人天生不喜歡顯露,即使危機之時,也顯得很平靜。他們總是顯得責(zé)無旁貸、堅定不變 、但是在他們冷靜的外表之下,也許有強烈卻很少表露的反應(yīng)。

          您適合的領(lǐng)域有:工商業(yè)領(lǐng)域、政府機構(gòu) 金融銀行業(yè)、政府機構(gòu)、技術(shù)領(lǐng)域、醫(yī)務(wù)領(lǐng)域

          您適合的職業(yè)有:

          · 審計師
          · 會計
          · 財務(wù)經(jīng)理
          · 辦公室行政管理
          · 后勤和供應(yīng)管理
          · 中層經(jīng)理
          · 公務(wù)(法律、稅務(wù))執(zhí)行人員
          · 銀行信貸員
          · 預(yù)算分析師
          · 保險精算師
          · 稅務(wù)經(jīng)紀人
          · 稅務(wù)檢查員
          · 機械、電氣工程師
          · 計算機程序員
          · 數(shù)據(jù)庫管理員
          · 地質(zhì)、氣象學(xué)家
          · 法律研究者
          · 律師
          · 外科醫(yī)生
          · 藥劑師
          · 實驗室技術(shù)人員
          · 牙科醫(yī)生
          · 醫(yī)學(xué)研究員
          · 信息總監(jiān)
          · 電腦編程員
          · 證券經(jīng)紀人
          · 會計
          · 文字處理專業(yè)人士


          注:本測試為beta版,答案供參考,不妨給本次測試結(jié)果的準確度給予百分比評價(100%為完全符合)
          同時為更好地幫助后來的測試朋友,如果您覺得有不合適或者遺漏的職業(yè),歡迎一起參與這個測試的改善。

          posted @ 2008-11-01 18:56 小強摩羯座 閱讀(203) | 評論 (0)編輯 收藏

          yuvyCbCr的差異

          Peter Lee 2006.02.28 videosky.9126.com

           

          今天在看intel ipp tutorial的時候,看到了講色彩模型的部分。以前,一直沒明白yuvYcbCr之間的差異,想必有些朋友也會有同樣的疑惑。所以,我看完之后就記載下來了。

           

          一、和rgb之間換算公式的差異

          yuv<-->rgb

          Y'= 0.299*R' + 0.587*G' + 0.114*B'

          U'= -0.147*R' - 0.289*G' + 0.436*B' = 0.492*(B'- Y')

          V'= 0.615*R' - 0.515*G' - 0.100*B' = 0.877*(R'- Y')

          R' = Y' + 1.140*V'

          G' = Y' - 0.394*U' - 0.581*V'

          B' = Y' + 2.032*U'

          yCbCr<-->rgb

          Y’ = 0.257*R' + 0.504*G' + 0.098*B' + 16

          Cb' = -0.148*R' - 0.291*G' + 0.439*B' + 128

          Cr' = 0.439*R' - 0.368*G' - 0.071*B' + 128

          R' = 1.164*(Y’-16) + 1.596*(Cr'-128)

          G' = 1.164*(Y’-16) - 0.813*(Cr'-128) - 0.392*(Cb'-128)

          B' = 1.164*(Y’-16) + 2.017*(Cb'-128)

          Note: 上面各個符號都帶了一撇,表示該符號在原值基礎(chǔ)上進行了gamma correction

           

          二、來源上的差異

          yuv色彩模型來源于rgb模型,

          該模型的特點是將亮度和色度分離開,從而適合于圖像處理領(lǐng)域。

          應(yīng)用:basic color model used in analogue color TV broadcasting.

           

          YCbCr模型來源于yuv模型。YCbCr is a scaled and offset version of the YUV color space.

          應(yīng)用:數(shù)字視頻,ITU-R BT.601 recommendation

           ps:

          通過上面的比較可以確定,我們在h.264,mpeg等編碼標準中用的yuv其實是YcbCr,大家不要被名稱搞混淆了。

          posted @ 2008-10-30 10:45 小強摩羯座 閱讀(427) | 評論 (0)編輯 收藏



            知人者智,自知者明。此二句文全出自老子《道德經(jīng)》。

            智,是自我之智。明,是心靈之明。“知人者”,知于外;“自知者”,明于道。智者,知人不知己,知外不知內(nèi);明者,知己知人,內(nèi)外皆明。智是顯意識,形成于后天,來源于外部世界,是對表面現(xiàn)象的理解和認識,具有局限性和主觀片面性;明,是對世界本質(zhì)的認識,具有無限性和客觀全面性。欲求真知灼見,必返求于道。只有自知之人,才是真正的覺悟者。

            老子說了,知道別人,你是智慧。你了解別人,你是智慧;你知道自己,了解自己,這是高明。同志們想,知道別人是智慧,知道自己是高明,合起來就是明智,你這個人很明智。


            圣人孔子說過:“知人者智,自知者明,勝人者有力,自勝者強。”意思是說,能認識別人的叫做機智,能認識自己的才叫做高明,能戰(zhàn)勝別人的叫做有力,能克制自己的人才算剛強。


             知人者智,自知者明。勝人者有力,自勝者強。

            大意是說:了解他人是一種智慧,而了解自己更是一種智慧;戰(zhàn)勝他人表明自己有力量,而戰(zhàn)勝自己則表明自己很強大。

            在老子看來,了解他人和了解自己都是智慧,然而了解自己比了解他人更進了一步。

            為什么這樣說?

            其一是因為,了解自己要比了解他人難,之所以說難,那是因為自己看不到自己,自己想不到自己;而要看到自己,想到自己,就無原則要有更大的智慧,需要有以他人為鑒的能力。

            這一點,戰(zhàn)國時期的哲學(xué)家韓非用具體事例做了說明。他說:

            楚莊王欲伐越,杜子諫曰:“王之伐越何也?”曰:“政亂兵弱。”杜子曰:“臣愚患之。智如目也,能見百肯之外而不能自見其睫。王之兵自敗于秦、晉,喪地數(shù)百里,此兵之弱也。莊路為盜于境內(nèi)而吏不能禁,此政之亂也。王之弱亂非越之下也,而欲伐越,此智之如目也。”王乃止。故知之難,不在見人,在自見。故曰:“自見之謂明。”

            楚莊王只看到越國朝政混亂、兵力薄弱,而看不到自己國家朝政混亂和兵力薄弱,因此想去討伐越國。杜子認為這是不明智的,并且用眼睛只能看到外物而看不到自己為比喻,使他明白了自己的缺陷,停止了愚蠢的行動。韓非通過這個事例說膽老子“自知者明”。并且下結(jié)論說:達到有智是很難的,之所以難,不是難在了解他人,而是難在了解自己。

            其二是因為,了解自己以具有自我意識為前提,而自我意識一旦產(chǎn)生,這就將會把人的智慧由個體自我意識引向類別自我意識:當(dāng)人有了個體自我意識的時候,也就在人的頭腦中樹立起了一個自我的標的,形成了一個全新的認識目標;向著這個目標前進,就會在深入了解個體自我的基礎(chǔ)上,逐步形成類別自我的意識。

                

          《道德經(jīng)》“知人者智”有感

                知人者智,自知者明。勝人者有力,自勝者強。知足者富。強行者有志。不失其所者久。死而不亡者壽。

                                                                          ——《道德經(jīng)》第三十三章

              在讀這一章的時候,我總是感覺每兩句之間是一種遞進的關(guān)系,細細忖度,似又不全是,前四句倒可以這么判斷,后四句就未必了。產(chǎn)生這種模糊的感覺可能與恰好每兩句的第二句給我的感觸更深有關(guān)系。

              “自知者明,自勝者強,強行者有志,死而不亡者壽”。自知比知人更難,自勝比勝人更艱,這是現(xiàn)時為人普遍認可的真理性的結(jié)論。“知足者富”則成為有些人掛在嘴邊聊以自慰的麻醉劑,使得這一句總是讓人聯(lián)想到停步不前與不思進取。其實從“為”的廣義論,老子無為即是有為,因為餞行“無為”的行為就是“有為”。所以“知足者富”更強調(diào)的是控制欲望,對結(jié)果淡然處之的境界。與此同時,便是要有志,要強行。所以人言:老子的哲學(xué)是無為,就是消極避世,是消極哲學(xué),我深不以為然,這是對老子的思想一知半解的產(chǎn)物,是沒有讀懂老子的主張。否則老子怎么會在“知足者富”后馬上闡明“強行者有志”?怎么會還提到“言善信,正善治,事善能,動善時”?

              “死而不亡者壽”是老子對生命價值的闡述,也引發(fā)了我對生死問題的思考。人從出生一刻起就在經(jīng)歷死亡的過程。死亡是死亡過程的終結(jié),也是死亡過程的高潮,就如同新年午夜的最后一聲鐘鳴。所以,所有活著的人都無時無刻不是在體驗死亡的過程。長壽不單純是以存活時間來計算的,如果用整個人類的歷史來衡量,活到二百歲,與活二十歲的區(qū)別小到可以忽略不計。對于個體來講,多活幾十年在生命終結(jié)時也是沒有多大差別的,遺憾也罷,沒有遺憾也罷,都要撒手的。而生命的價值則是長壽的矯正值。老子的思想存活到現(xiàn)在,歷經(jīng)約2500多年而不朽,老子的壽命應(yīng)是實際生存時間加上這還在延續(xù)的2500多年。普通百姓一生疼兒疼女,他的壽命則應(yīng)是實際生存時間加上兒女懷念他的時間。而如果生命特征仍在,但凡事以一己私利為本,全然無惠及他人之處,那么,他的壽命就要做減法了,需要用實際生存時間減去開始自私自利的時間。左派詩人臧克家的那句詩是有道理的:有的人活著,他已經(jīng)死了。有的人死了,他還活著。我們都要反省,我們還活著嗎?我們要怎樣活?

          posted @ 2008-10-28 23:23 小強摩羯座 閱讀(182) | 評論 (0)編輯 收藏

          一個可愛男人對老婆的懺悔
          2008-08-08 10:20
          遵照您的旨意,我在書房里反省了一個小時四十三分零七秒,喝了一杯白開水,上了一次衛(wèi)生間,沒有抽煙,以上事實準確無誤,請審查。附上我的檢討報告,不當(dāng)之處可以協(xié)商。
            經(jīng)過3個月的婚姻生活,我認為老婆同志溫柔賢良,勤奮聰穎,是不可多得的好妻子,而身為丈夫的我卻舉止乖張,態(tài)度輕狂,所作所為確有值得商榷之處。
            以下是我對自己惡劣行徑的剖析,請領(lǐng)導(dǎo)批閱:
            1.昨天的事情是我不對。你做的紅燒茄子雖然有點咸,但是香醇可口,瑕不掩瑜,我不該指責(zé)你浪費鹽。我這么求全責(zé)備,完全是暗藏嫉妒之心。不過再加點水是可以的。
            2.你說喜歡陸毅的時候,我不該信口雌黃說我喜歡梁詠琪,害得你兩天不能理我,極其痛苦 。仔細一想,我的回答確實很不妥當(dāng),因為你的花心還局限于內(nèi)地,我卻沖到了港臺,我還是喜歡周迅好了。
            3.你喜歡看韓劇里的小政哥,我不該百般阻撓,你拿我和他比較我也不該表示抗議,因為人家小政哥都沒有抗議。
            4.星期六的那次婚禮,我說我開會,不知道能不能去,你準備了兩個紅包,一個100的,一個200的,結(jié)果我沒去,你不小心送出去了厚的。親愛的,我不該笑你,你已經(jīng)做得很好了,換作我,可能將兩個都一塊兒送出去了。
            5.上次你買來黃花魚,我不該信誓旦旦,冒充大廚,結(jié)果你幫廚時歡呼雀躍,聞味時垂涎欲滴,吃的時候卻垂頭喪氣,對于你脆弱的心理而言,這是難以承受的。
            6.你剪短了頭發(fā),問我好不好看,我說好看,你很高興;進一步求證,我說還行;你追問到底好不好,我回答,不如以前好,使你非常難過。這是我的錯,以后此類的回復(fù)均以第一次為準。
            7.你在網(wǎng)上認識了很多優(yōu)秀的朋友,一時間鴻雁傳書,玉照紛飛,我不該用報紙上的報道打擊你 。不過你穿白裙子的那張照片真的不好看,還是穿高領(lǐng)衫的那張好,旁邊有我當(dāng)保鏢,顯得氣派。
            8.探望你外甥那次,你回來和我討論誰應(yīng)該洗尿布,我的確不該推卸責(zé)任,惹你生氣。不過親愛的,這項任務(wù)過于遙遠,我們還是討論誰負責(zé)生好了。他們家是誰生的?
            9. 你指責(zé)我把襪子到處亂放時,我不應(yīng)該反誣你到處放書,畢竟襪子是臭的,書是香的。
            10.你請雪兒吃麥當(dāng)勞的時候,我不該在桌子下面偷偷踢她,讓你大發(fā)雷霆,可是她踩壞了我那么多皮鞋,你為什么都不管?
            11.你說我長得不如你漂亮的時候,我不應(yīng)該頑固抵賴,你說得很對,證據(jù)確鑿,可以讓瞎子作證。
            12.我下樓倒垃圾回來,你圍著我轉(zhuǎn)了好幾圈,問我抽了幾根,我說一根,你就大生其氣。親愛的,我真不知道你的鼻子如此靈敏,其實我抽了兩根。
            你一直是善解人意的女孩,希望你能夠原諒我,給我改過自新的機會。為了家庭安定,經(jīng)濟繁榮,順便提幾個小小的建議:
            1.不要指著電視里的帥哥說他像你從前的男友,你第一次近距離接近男士是在大二的舞會上,慌慌張張地狂踩別人的腳,很不幸那個人是我。
            2.逛商店的時候,不要總是突發(fā)奇想,比如要買一個粉碎機回去做蒜泥,你不覺得我這個機器比較經(jīng)濟嗎?
            3.吃飯的時候,你總是嫌我吃得少,照相的時候卻又嫌我胖,親愛的,這真的讓我很為難。
            4.不要給我出一些刁鉆古怪的問題,說那是腦筋急轉(zhuǎn)彎,結(jié)果讓我邏輯混亂。
            5.不要在我看槍戰(zhàn)片的時候給我講笑話,而且不笑不行。
            以上種種,請老婆大人明鑒。友情提示:臥室里昨日有蜘蛛出沒,如需護駕,請聯(lián)系客廳西面休閑區(qū)組合沙發(fā)一號,竭誠為您服務(wù)。

          posted @ 2008-10-09 22:27 小強摩羯座 閱讀(187) | 評論 (1)編輯 收藏


                  喜歡過很多東西,喜歡學(xué)很多東西,因為好奇,因要尋找不確定中的確定之美。歌德的話始終在心中縈繞“一個聰明而又好學(xué)的人,通過他所做好的一個事,可以做好每一件事”。

                  人生卻是充滿了不確定。被拉著進入小學(xué)教室,不知怎么上了初中,一不小心還考上高中,上了大學(xué),又讀了研,或許會再讀。是啊,人很多時候不知道自己要做什么,甚至其實很多時候都不知道自己正在做什么??梢粋€人如果能把這些都想清楚了,那他就不是人了,是人精了。我們活著就是要不斷的經(jīng)歷。

                  我卻又常是要尋找確定性,于是喜歡數(shù)學(xué),相信我能做好一件事因為我都能把它做壞。于是顛覆了好與壞的原義,超越了觀念的阻撓,直接面對事情本身。這是好的,它簡化了我了解事情本原的過程。
                  
                  很多的信念在心里慢慢的變成了原則,于是就順理成章,理所當(dāng)然,自然而然的做事,不對人。是好也有壞。

                  我不是在寫《懺悔錄》,但發(fā)現(xiàn)我用了它的語氣。

                  想自己或許可以寫小說,至少懂得怎么玩語言,有些想象,有些經(jīng)歷,也會瞎編??墒裁磿r候?qū)懩??我沒有時間?

          posted @ 2008-10-09 00:49 小強摩羯座 閱讀(111) | 評論 (0)編輯 收藏


               曾經(jīng)給自己定下規(guī)劃,要常常問自己在做什么,要自省,要整理思路,可時常卻不會。畢竟吾非柏拉圖之輩,乃一介平民。求事事盡心,求我心泰然,求穩(wěn)健求成熟,目標有甚多。目標分解,大事化小,小事個個擊破,思路也常有,行動卻遲緩。

            常思人生苦短,應(yīng)趁有心有力之時,有所建樹,有所累積,有一專能,卻未能。錢老說二十歲不狂者無志,三十歲仍狂者無智,可我處中間者應(yīng)如何。生活的要素不多也不少,卻也常使人困惑,常不能專心。堅持是成功的必要條件,卻不曾實踐之。忘記是沉浸另一件事的需要,卻鮮有做到。這或許且稱之為人生的第一個四份之一的結(jié)束,究竟意味著什么呢,我卻還不知道。

                  簡單的道理,豐富的生活。有很多時候卻是“老人(指我以前的老師們)言“終究是對的:

                   王玉國老師說:沒有做不到,只不想不到。
                   張老師說:能改變自己的人是成功的人,能改變別人的人是一個偉大的人。
                  高老師說:做人其實低頭比抬頭更難。艱難困苦,于汝玉成。
                  
               有幸初生牛犢就見到了我”高高在上“的導(dǎo)師,也給四點忠告,說在研究生階段很重要的要著力發(fā)展的四點
                      一、人際關(guān)系;
                      二、擴大知識面;
                      三、英語;
                      四、術(shù)業(yè)要有專攻。

                  還有很多,時常在經(jīng)意間想起,感觸良多。但是過后卻也如云煙,許是道理懂得太多,行動卻是太少吧。努力行動吧!
                  
                  

          posted @ 2008-09-17 19:49 小強摩羯座 閱讀(186) | 評論 (0)編輯 收藏


          『VC++技術(shù)內(nèi)幕』(第四版)讀書筆記

          關(guān)鍵字:VC++
          原作者姓名:loose_went
          文章原出處:vczx.com

          寫在前面:

            站長所看的『VC++技術(shù)內(nèi)幕』版本為--潘愛民和王國印譯清華大學(xué)出版的第四版,因有時工作忙碌,不能及時更新,請大家見諒!


          第一天 Windows的編程模式 第二天 MFC應(yīng)用程序框架
          第三天 消息映射和視圖類 第四天 資源和編譯
          第五天 基本事件處理 第六天 映射模式
          第七天 滾動視窗 第八天 社備環(huán)境類
          第九天 GDI對象 第十天 windows顏色映射

          第一天 Windows的編程模式

            Windows程序中必須要有WinMain函數(shù),因為該函數(shù)最重要的任務(wù)是創(chuàng)建該應(yīng)用程序的主窗口。Windows程序與基于MS-DOS程序的最大差別就在于:MS-DOS程序是通過調(diào)用操作系統(tǒng)的功能來獲得用戶輸入的,而Windows程序是通過操作系統(tǒng)發(fā)送的消息來處理用戶輸入的。Windows消息都是經(jīng)過嚴格定義的,并且適用于所有的程序。
            WINDOWS提供通用的圖形設(shè)備接口(GUI),我們通過調(diào)用(GDI)函數(shù)和硬件打交道,不必理會設(shè)備環(huán)境,WINDOWS會自動將設(shè)備環(huán)境結(jié)構(gòu)映射到相應(yīng)的物理設(shè)備。
            Windows程序設(shè)計中所需要的數(shù)據(jù)是存儲在資源文件中的,這樣,連接器就可以把編譯好的二進制代碼和二進制資源文件結(jié)合起來生成可執(zhí)行程序。資源文件可以包括位圖、圖標、菜單定義、對話框設(shè)計,甚至可以包含用戶自己定義的格式。
            Windows程序允許動態(tài)的連接目標模塊,并且多個應(yīng)用程序可以共享同一個動態(tài)連接庫。
          VC++的源程序瀏覽器能夠使我們從類或函數(shù)的角度來了解或編輯程序,而不是直接從文件入手。在看別人的源代碼時如果能熟練的使用源代碼瀏覽器將會事半功倍。源程序瀏覽器主要的查看狀態(tài)有以下幾種:
          Definitions and References--選擇任何函數(shù)、變量、類型、宏定義可以看到它在項目中的定義,并且在何處和什么地方用到它。
          Call Graph/Caller Graph--對于所選擇的函數(shù),給出它的調(diào)用與被調(diào)用函數(shù)的圖示。
          Derived Class Graph/Base Class Graph--給出類層次關(guān)系的圖形表示,可以看到所選擇的類的派生類和基類以及成員。
          File Outline--對于所選的文件,列出文件中的類、函數(shù)和數(shù)據(jù)成員,同時還顯示它們定義的位置和使用位置。
            可見Source Brower比起Class View來功能多了很多也更加好用。
            對于本章學(xué)習(xí)loose_went建議大家在VC++6中用AppWizard生成一個空的程序,然后試著看看都有哪些文件,和他們的類層次、函數(shù)、宏、結(jié)構(gòu)的定義,我就是這樣干的,學(xué)編程不動手是不行的。


          Top of Page

          第二天 MFC應(yīng)用程序框架

          ?MFC是C++的Microsoft Windows API
          ?MFC產(chǎn)生的應(yīng)用程序使用了標準化的結(jié)構(gòu)。
          ?MFC產(chǎn)生的應(yīng)用程序短而運行速度快。
          ?VC++工具降低了編碼的復(fù)雜性,這當(dāng)然了,很多代碼都由它代勞了,呵呵。
          ?MFC庫應(yīng)用程序框架的功能非常豐富。
            以上說的都是MFC庫的優(yōu)點,雖然說MFC有著這樣多的優(yōu)點,但我個人認為不能盲目的學(xué)習(xí)它,要想學(xué)好,那么您必須先掌握C++,這是毋庸置疑的??赡軇傞_始的時候,您覺得收獲很大,也很有趣,但要進一步提高,沒有C++基礎(chǔ)是很難的。所以站長建議大家學(xué)習(xí)的時候要有先有后,這樣才能學(xué)好!
          應(yīng)用程序框架是一種類庫的超集。
            我們現(xiàn)在先來看一個例子,看看MFC有多么強大!您只需加一行代碼,甚至一行都不用加只需要點幾下鼠標就可以創(chuàng)建一個windows 程序,不信,試一下:
          1、打開VC++6從菜單選擇NEW,給項目命名為"MyApp "。
          2、選擇MFC AppWizard[exe] 選項,除STEP 1選擇單文檔外其他STEP缺省。
          3、在Class View選擇CMyAppView類的OnDraw()成員函數(shù)雙擊會在C++編譯器看到以下內(nèi)容

          void CMyAppView::OnDraw(CDC* pDC)
          {
          CMyAppDoc* pDoc = GetDocument();
          ASSERT_VALID(pDoc);
          // TODO: add draw code for native data here
          }
          在 // TODO: add draw code for native data here的位置增加一行代碼
          void CMyAppView::OnDraw(CDC* pDC)
          {
          CMyAppDoc* pDoc = GetDocument();
          ASSERT_VALID(pDoc);
          pDC->TextOut(10,10,"愿vc在線能成為您學(xué)習(xí)vc最好的朋友!"); //增加的一行
          // TODO: add draw code for native data here
          }
            完了,就這么簡單。編譯運行??吹搅藛??這個程序具備WINDOWS程序的所有特性,例如有菜單、工具條、狀態(tài)欄、最大化、關(guān)閉、甚至還有關(guān)于對話框、打印預(yù)覽.....全了,這就是AppWizard通過MFC動態(tài)創(chuàng)建的一個應(yīng)用程序。從這個小例子可以看出用VC/MFC設(shè)計WINDOWS程序多么方便。

          下面我們看看書上的例子,以便更進一步了解應(yīng)用程序框架。
          1、先建立一個Win32 Application的應(yīng)用程序。
          2、選擇Project->Add to project->Files,分別創(chuàng)建一個名為MyApp.h和一個名為MyApp.cpp的文件。
          3、添加代碼:(最好照敲一下代碼到編譯器,別用Ctrl+C/Ctrl+V)
          //***********************************************
          // MyApp.h
          //

          class CMyApp:public CWinApp
          {
          public:
          virtual BOOL InitInstance();
          };

          class CMyFrame:public CFrameWnd
          {
          public:
          CMyFrame();
          protected:
          afx_msg void OnLButtonDown(UINT nFlags,CPoint point);
          afx_msg void OnPaint();
          DECLARE_MESSAGE_MAP()
          };

          //*****************************************************
          // MyApp.cpp
          //

          #include "afxwin.h"
          #include "myapp.h"
          CMyApp theApp;//建立一個CMyAPP對象
          BOOL CMyApp::InitInstance ()
          {
          m_pMainWnd=new CMyFrame();
          m_pMainWnd->ShowWindow (m_nCmdShow);
          m_pMainWnd->UpdateWindow ();
          return TRUE;
          }

          BEGIN_MESSAGE_MAP(CMyFrame,CFrameWnd)
          ON_WM_LBUTTONDOWN()
          ON_WM_PAINT()
          END_MESSAGE_MAP()

          CMyFrame::CMyFrame(){
          Create(NULL,"MYAPP Application");
          }
          void CMyFrame::OnLButtonDown (UINT nFlags,CPoint point)
          {
          TRACE("Entering CMyFrame::OnLButtonDown - %lx,%d,%d\n",
          (long)nFlags,point.x ,point.y);
          }

          void CMyFrame::OnPaint ()
          {
          CPaintDC dc(this);
          dc.TextOut (0,0,"Hello World!");
          }

          4、編譯運行,報錯。為什么呢?原來還沒有添加MFC的支持,在Project Setting選項General屬性頁選擇"Use MFC in a Static Library"
          5、再按Ctrl+F5,怎么樣,簡單吧?
          讓我們看看這個程序中的一些元素。
          ①WinMain函數(shù):Windows總是要求每個應(yīng)用程序都要有WinMain函數(shù)的,您之所以看不見,是因為它已經(jīng)隱藏在應(yīng)用程序框架內(nèi)部了。
          ②CMyApp類:CMyApp類的對象代表一個應(yīng)用程序,CWinApp基類決定它的大部分行為。
          ③應(yīng)用程序的啟動:當(dāng)開始運行應(yīng)用程序時WINDOWS會調(diào)用WinMain函數(shù),WinMain會查找該應(yīng)用程序的全局對象theApp。
          ④CMyApp::InitInstance成員函數(shù):發(fā)現(xiàn)theApp后自動調(diào)用重載的虛函數(shù)InitInstance來完成主窗口的構(gòu)造和顯示工作。
          ⑤CWinApp::Run成員函數(shù):WinMain在調(diào)用InitInstance之后緊接著調(diào)用Run函數(shù),它被隱藏在基類中負責(zé)傳遞應(yīng)用程序的消息給相映的窗口。
          ⑥CMyFrame類:此類的對象代表著應(yīng)用程序的主窗口。它的構(gòu)造函數(shù)調(diào)用基類CFrameWnd的Create函數(shù)創(chuàng)建具體的窗口結(jié)構(gòu)。
          ⑦CMyFrame::OnLButtonDown函數(shù):演示消息處理機制,當(dāng)鼠標坐鍵被按下這一事件被映射到CMyFrame的OnLButtonDown函數(shù)上,如果你選擇F5進行編譯運行的話可以在調(diào)試窗口看到TRACE宏顯示的類似下面的信息
          Entering CMyFrame::OnLButtonDown - 1,309,119
          Entering CMyFrame::OnLButtonDown - 1,408,221
          ⑧CMyFrame::OnPaint函數(shù):應(yīng)用程序每次重新繪制窗口都需要調(diào)用此函數(shù),將顯示"Hello World!"放在這里是因為每次窗口發(fā)生變化時保證"Hello World!"被顯示,你可以試著將語句:
          CPaintDC dc(this);
          dc.TextOut (0,0,"Hello World!");
          寫在別出,例如寫在
          void CMyFrame::OnLButtonDown (UINT nFlags,CPoint point)
          {
          TRACE("Entering CMyFrame::OnLButtonDown - %lx,%d,%d\n",
          (long)nFlags,point.x ,point.y);
          CPaintDC dc(this);
          dc.TextOut (0,0,"Hello World!");
          }
          運行后當(dāng)點擊左鍵時顯示"Hello World!",但當(dāng)窗口最小化再最大化時"Hello World!"不見了。
          ⑧關(guān)閉應(yīng)用程序:用戶關(guān)閉應(yīng)用程序時會有一系列事件發(fā)生。首先CMyFrame對象被刪除,然后退出Run,進而退出WinMain,最后刪除CMyApp對象。
            通過上面的示例我們看見程序的大部分功能包含在基類CWinApp和CFrameWnd中,我們只寫了很少的函數(shù),便可以完成很復(fù)雜的功能。所以應(yīng)用程序框架不僅僅是一種類庫,它還定義了應(yīng)用程序的結(jié)構(gòu),除了基類外還包括WinMain函數(shù),以及用來支持消息處理、診斷、DLL、等都包含在應(yīng)用程序框架中。


          Top of Page

          第三天 消息映射和視圖類

            MFC庫應(yīng)用程序框架沒有采用虛函數(shù)來處理windows消息,而是通過宏將消息映射到派生類相應(yīng)的成員函數(shù)上。文檔-視圖結(jié)構(gòu)是應(yīng)用程序框架的核心,它把數(shù)據(jù)從用戶對數(shù)據(jù)的觀察中分離出來,這樣做最大的好處就是同一個數(shù)據(jù)可以對應(yīng)多個視圖。比如同一個股票報價數(shù)據(jù),既可以有報表觀察窗口,也可以有圖形觀察窗口,明白了否?
            視圖簡單來說就是一個普通的窗口,對于程序員來說就是一個從MFC庫中Cview類派生出來的類的一個對象。視圖類分為兩個源文件模塊:頭文件(H)和源代碼文件(CPP)。
          用Appwizard創(chuàng)建一個SDI應(yīng)用程序,產(chǎn)生了如下文件(假設(shè)工程名為Exc01):
          Exc01.dsp 項目文件,Visual Studio用它來創(chuàng)建應(yīng)用程序
          Exc01.dsw 工作空間文件,包含一個項目Exc01.dsp
          Exc01.rc ASCII碼資源描述文件
          Exc01View.cpp 包含CExc01View類成員函數(shù)和視圖類文件
          Exc01View.h 包含CExc01View類定義的視圖類頭文件
          Exc01.opt 二進制文件,告訴Developer Studio本項目的哪些文件是打開的,又是如何排序的
          Readme.txt 用來解釋所產(chǎn)生的所有文件的文本文件
          Resource.h 包含#define常量定義的頭文件
            從Exc01View.cpp和Exc01View.h的代碼中可以看出,這兩個文件已經(jīng)完全定義了CExc01View類,而該類正是此應(yīng)用程序的核心。CExc01View類的對象與應(yīng)用程序的視窗相關(guān)聯(lián),應(yīng)用程序的所有"動作"都會在這個視窗中顯示出來。
            CExc01View類的兩個最重要的基類是CWnd和CView類。CWnd類提供了CExc01View的窗口屬性,而CView類則提供了它和應(yīng)用程序框架的其它部分之間的聯(lián)系,特別是和文檔以及框架窗口之間的聯(lián)系。這一點一定要記住。
            下面我們來看一下如何在視窗內(nèi)繪圖。最重要的一個函數(shù)是OnDraw()函數(shù),它是一個虛函數(shù),每次窗口被重畫時,應(yīng)用程序都要先調(diào)用這個函數(shù)。注意:盡管可以隨時對窗口繪制,但最好還是等變化內(nèi)容積累到一定程度后再教給OnDraw()函數(shù)處理,這樣效率會高一些。
          在MFC中,設(shè)備環(huán)境是由C++的CDC類對象來表示的,該對象被作為參數(shù)傳給Ondraw()函數(shù),這樣,我們就可以調(diào)用CDC的許多成員函數(shù)來完成各種繪制了。
          找到OnDraw()函數(shù),用以下語句替換函數(shù)原來的內(nèi)容:
          pDC->TextOut( 0, 0, "Hello World!" );
          pDC->Ellipse(CRect(0,20,100,120));
          再編譯運行,看到了什么?
            TextOut和Ellipse都是設(shè)備環(huán)境類CDC的成員函數(shù),MFC庫提供了一個用來表示windows矩形的類CRect,在這里CRect的一個臨時對象被作為參數(shù)傳遞給 了Ellipse函數(shù),當(dāng)外接矩形的寬和高相等時,Ellipse函數(shù)就畫出個圓。


          Top of Page

          第四天 資源和編譯

            資源文件(就是以應(yīng)用程序名和擴展名是.rc的文件)很大程度上決定了應(yīng)用程序的用戶界面。在VC++中資源文件包括以下內(nèi)容:
          Accelerator //模擬菜單和工具欄選擇的鍵盤定義
          Dialog //對話框的布局及內(nèi)容
          Icon //圖標有兩種一種是16X16一種是32X32。
          Menu //應(yīng)用程序的主菜單及所屬的彈出式菜單
          String table //一些字符串,不屬于C++源代碼部分
          Toolbar //工具條。
          Version //程序的描述、版本號、支持語言信息。
            除了以上信息,.rc文件還包含了以下語句: #include "afxres.h" #include "afxres.rc" 它們的作用是把適合于所有應(yīng)用程序的一些通用MFC庫資源包含進來,其中包括字符串、圖形按鈕以及打印所需的一些元素。
            關(guān)于資源編輯器的使用就不多說了,因為它的操作很簡單,需要注意的是雖然resource.h是一個ASCII碼文件可以用文本編輯器進行編輯,但如果使用文本編輯器進行編輯的話,下次再使用資源編輯器時所做的修改有可能丟失,所以我們應(yīng)該在盡量在資源編輯器中編輯應(yīng)用程序的資源,新增的資源內(nèi)容回自動的添加在我們的程序相應(yīng)位置,例如resource.h而不用我們操心。
            編譯在VC++中有兩種模式,一種是Release Build另一種是Debug Build。它們之間的區(qū)別在于,Release Build不對源代碼進行調(diào)試,不考慮MFC的診斷宏,使用的是MFC Release庫,編譯十對應(yīng)用程序的速度進行優(yōu)化,而Debug Build則正好相反,它允許對源代碼進行調(diào)試,可以定義和使用MFC的診斷宏,采用MFC Debug庫,對速度沒有優(yōu)化。所以我們應(yīng)該在Debug模式下開發(fā)應(yīng)用程序,然后在Release模式下發(fā)布應(yīng)用程序。在我們的工程文件夾下會有一個Debug文件夾和一個Release文件夾分別存放輸出文件和中間文件。
            診斷宏是我們編譯程序時檢測程序狀態(tài)的有利工具,例如上兩篇用到的TRACE宏,可以在Debug窗口獲得你需要的診斷信息,而不用設(shè)置對話框之類的方法,在發(fā)布時Release會自動濾掉此信息。
            為了更好的管理項目,最好理解系統(tǒng)是如何處理預(yù)編譯頭文件的。VC++有兩個預(yù)編譯系統(tǒng):自動的和手工的。這一部分筆者就不多說了,建議讀者好好看看。


          Top of Page

          第五天 基本事件處理

            用戶在視窗中的任何一個操作,都會引起Windows自動發(fā)送一個消息給該視窗。我們以一個例子來說明:比如我們在視窗中按下鼠標左鍵,Windows就會發(fā)送ON_LBUTTONDOWN消息給視窗,那么在視窗類中就必須包含下面的成員函數(shù):
          Void CmyView::OnLButtonDown(UINT nFlags, Cpoint point)
          {
          //event processing code here
          }
            在類頭文件中也要包含相應(yīng)的函數(shù)聲明:
          afx_msg void OnLButtonDown(UINT nFlags, Cpoint point)
          在代碼文件中還要有一個消息映射宏,用于將OnLButtonDown函數(shù)和應(yīng)用程序框架聯(lián)系在一起:
          BEGIN_MESSAGE_MAP(CmyView, CView)
          ON_WM_LBUTTONDOWN()
          // other message map entries
          END_MESSAGE_MAP
            最后,在類庫頭文件中包含如下語句:
          DECLARE_MESSAGE_MAP()
            以上這些步驟,我們都可以借助于ClassWizard來完成。這就是消息映射的過程。

            MFC庫對140種windows消息直接提供了消息控制函數(shù),并且我們還可以自己定義自己的消息,下面列出的五種消息是我們應(yīng)該特別注意的(MSDN上有更詳細的內(nèi)容)。
          WM_CREATE
            該消息是Windows發(fā)給視圖的第一個消息。當(dāng)應(yīng)用程序框架調(diào)用create函數(shù)時該消息便會被發(fā)送,此時窗口還未創(chuàng)建完成,不可見,因此在消息控制函數(shù)OnCreate內(nèi)不能調(diào)用那些依賴窗口處于完全激活狀態(tài)的Windows函數(shù)。如果需要可以在重載的OnInitialUpdate函數(shù)內(nèi)調(diào)用。不過注意在SDI應(yīng)用程序OnInitialUpdate函數(shù)可能被多次調(diào)用。
          WM_CLOSE
            當(dāng)用戶關(guān)閉窗口時,系統(tǒng)會發(fā)送WM_CLOSE消息。如果派生類重新定義了OnClose函數(shù),就可以完全控制關(guān)閉過程,可以將提醒用戶存盤之類的工作放在這里完成。我們可以通過重載CDocument::SaveModified虛函數(shù)達到相同的目的。
          WM_QUERYENDSESSION
            從字面的意思看就可以看出,當(dāng)用戶退出Windows時,或者調(diào)用了ExitWindows 函數(shù)時。Windows會發(fā)送WM_QUERYENDSESSION消息給所有的正在運行的應(yīng)用程序,由OnQueryEndSession消息映射函數(shù)對消息進行處理。在它之后應(yīng)該是WM_ENDSESSION 消息。
          WM_DESTROY
            在Windows發(fā)送WM_CLOSE消息后,緊接著會發(fā)送WM_DESTROY消息,雖然窗口已經(jīng)Close但實際上并沒有完全清除,在任務(wù)管理器中還可以看見應(yīng)用程序的進程(我想很多木馬或病毒都是無窗口的程序,它們的做法是生成了已經(jīng)活動狀態(tài)的窗口但不顯示出來),利用這個消息控制函數(shù)便可以對依賴于當(dāng)前窗口存在的東西做清除工作,不過一定要注意,應(yīng)該調(diào)用基類的OnDestroy函數(shù),而不能在用戶自己的視圖的OnDestroy函數(shù)中終止窗口的析構(gòu)過程,終止析構(gòu)過程應(yīng)該在OnClose函數(shù)中。
          WM_NCDESTROY
            當(dāng)窗口被取消所發(fā)送的最后一個消息就是這個消息。我們可以在OnNcDestroy函數(shù)中做一些不依賴該窗口是否處于活動狀態(tài)的最后的處理工作,(我實在想不出還需要做什么?那位朋友能給個例子),注意一定要調(diào)用基類中的OnNcDestroy函數(shù)。

            MFC庫中非靜態(tài)數(shù)據(jù)成員的名字以m_為前綴。
            一個窗口具有一個矩形的"客戶區(qū)域",CWnd中的GetClient成員函數(shù)可以給出客戶區(qū)域的大小,只允許在客戶區(qū)域內(nèi)繪圖。
            標準的windows應(yīng)用程序會首先登記一個窗口類,這不同于C++類,同時在處理過程中,還需要對每個類指定窗口過程。每次應(yīng)用程序調(diào)用CreateWindow建立一個窗口時,都要指定一個窗口類作為參數(shù),這樣就把新建立的窗口和窗口過程函數(shù)連接起來了,每次windows給窗口發(fā)送消息的時候,這個函數(shù)就會被調(diào)用,以檢查用參數(shù)傳進來的消息碼。

          Top of Page

          第六天 映射模式

            所謂映射模式,說白了就是坐標系。在默認情況下,Windows所繪圖像單位為像素,這是因為設(shè)備環(huán)境用了默認的映射模式MM_TEXT,所以如下語句所繪圖形為長和寬都為200像素的方塊:   pDC->Rectangle(CRect(0,0,200,200));
            那么我們要繪制一個長和寬都是4厘米的方塊該怎么做呢?這就必須改變設(shè)備環(huán)境的默認映射模式為MM_HIMETRIC,它的圖像單位為1/100mm,而不是像素了。它的y軸方向和MM_TEXT的相反,它的向下為遞減的,因此用如下語句就可以繪出4×4cm的方塊了:
          pDC->SetMapMode( MM_HIMETRIC);
          pDC->Rectangle(CRect(0,0,4000,-4000));
            下面我們再來了解一下Windows都提供了哪些映射模式。
          1、MM_TEXT映射模式
            這種模式下,繪圖單位為像素,x軸向右遞增,y軸向下遞增,我們可以用CDC的SetViewPortOrg和SetWindowOrg函數(shù)來改變坐標原點的位置,下面的代碼就是把坐標原點設(shè)在了(100,100)處,畫了一個200×200像素的方塊,此時邏輯坐標點(100,100)被映射到了設(shè)備坐標點(0,0)處,下一篇的滾動窗口使用的就是這種變換。
          Void CmyView::OnDraw( CDC *pDC ){
          pDC->SetMapMode(MM_TEXT);
          pDC->SetWindowOrg(Cpoint(100,100));
          pDC->Rectangle(CRect(100,100,200,200));
          }
          2、固定比例映射模式
            Windows提供了一組非常重要的固定比例影視模式,所有這種模式都遵循x軸向右遞減,y軸向下遞減的規(guī)則,而且我們無法將其改變。固定比例模式之間唯一的差別就在于實際的比例因子。下表列出了影視模式和比例因子的對應(yīng)情況:

          映射模式 邏輯單位
          MM_LOENGLISH 0.01英寸
          MM_HIENGLISH 0.001英寸
          MM_LOMETRIC 0.1mm
          MM_HIMETRIC 0.01mm
          MM_TWIPS 1/1440英寸

            MM_TWIPS模式常用于打印機。
          3、可變比例映射模式
            Windows還提供了兩種映射模式MM_ISOTROPIC和MM_ANISOTROPIC,這兩種模式允許我們修改比例因子和坐標原點。在MM_ISOTROPIC模式下,縱橫比總是1:1,就像改變圖像時鎖定比例一樣,而MM_ANISOTROPIC模式則可以獨立的改變x和y的比例因子,即圓可以變成扁圓。
            以上就是常見的映射模式,筆者建議:我們沒必要死記住這些模式,只是到用的時候會用就可以了,哪怕查查MSDN,這個東東真好!
            在設(shè)置了映射模式和相應(yīng)參數(shù)之后,我們可以用CDC的LPtoDP函數(shù)將邏輯坐標轉(zhuǎn)換為設(shè)備坐標,用DptoLP函數(shù)將設(shè)備坐標轉(zhuǎn)換為邏輯坐標。那么我們什么時候用什么樣的坐標呢?有一些規(guī)則如下:
          ① 可以認為CDC的所有成員函數(shù)都以邏輯坐標為參數(shù)
          ② 可以認為CWnd的所有成員函數(shù)都以設(shè)備坐標為參數(shù)
          ③ 所有選中測試都應(yīng)該選用設(shè)備坐標,區(qū)域的定義應(yīng)采用設(shè)備坐標,某些像CRect::PtInRect之類的函數(shù)只有采用設(shè)備坐標才能有正確的結(jié)果
          ④ 將一些長期使用的值用邏輯坐標來保存,如果用設(shè)備坐標,那么只要用戶對窗口進行一下滾動,坐標就不再有效了
            一般情況下,我們在CView的虛函數(shù)OnPrepareDC中設(shè)置映射模式,應(yīng)用程序框架在調(diào)用OnDraw函數(shù)之前調(diào)用這個虛函數(shù)。


          Top of Page

          第七天 滾動視窗

            CView類并不直接支持窗口滾動,如要實現(xiàn)窗口滾動,就要用到CView的派生類CScrollView類,CScrollView的成員函數(shù)能夠處理滾動條并發(fā)送給視圖WM_HSCROLL和WM_VSCROLL消息,從而實現(xiàn)窗口的滾動。
            在文檔-視圖結(jié)構(gòu)中,視圖窗口建立以后,框架最先調(diào)用OnInitialUpdate虛函數(shù),在框架第一次調(diào)用OnDraw函數(shù)前也是先調(diào)用OnInitialUpdate函數(shù),因此在OnInitialUpdate函數(shù)中設(shè)置滾動視窗的初始化最合適。
            下面我們就來創(chuàng)建一個滾動示例程序a:
            1、 用AppWizard創(chuàng)建一個文檔-視圖程序a,注意在第六步時設(shè)置CAView的基類應(yīng)為CScrollView而不是CView。
            2、 在CAView中加入數(shù)據(jù)成員m_rectEllipse和m_nColor。
            3、 修改OnInitialUpdate函數(shù)如下:
          void CAView::OnInitialUpdate()
          {
          CScrollView::OnInitialUpdate();

          CSize sizeTotal( 20000, 30000 ); //邏輯窗口大小20×30cm
          CSize sizePage( sizeTotal.cx/2, sizeTotal.cy/2 );
          CSize sizeLine( sizeTotal.cx/50, sizeTotal.cy/50 );
          SetScrollSizes( MM_HIMETRIC, sizeTotal, sizePage, sizeLine );

          }
          4、 用ClassWizard產(chǎn)生對消息WM_KEYDOW控制的OnKeyDown函數(shù),并編輯代碼如下:
          void CAView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
          {
          // TODO: Add your message handler code here and/or call default

          switch( cChar ){
          case VK_HOME:
          OnVScroll( SB_TOP, 0, NULL );
          OnHScroll( SB_LEFT, 0, NULL );
          break;
          case VK_END:
          OnVScroll( SB_BOTTOM, 0, NULL );
          OnHScroll( SB_RIGHT, 0, NULL );
          break;
          case VK_UP:
          OnVScroll( SB_LINEUP, 0, NULL );
          break;
          case VK_DOWN:
          OnVScroll( SB_LINEDOWN, 0, NULL );
          break;
          case VK_PRIOR:
          OnVScroll( SB_PAGEUP, 0, NULL );
          break;
          case VK_NEXT:
          OnVScroll( SB_PAGEDOWN, 0, NULL );
          break;
          case VK_LEFT:
          OnHScroll( SB_LINELEFT, 0, NULL );
          break;
          case VK_RIGHT( SB_LINERIGHT, 0, NULL );
          break;
          default:
          break;
          }

          5、 編輯構(gòu)造函數(shù)和OnDraw函數(shù)如下:
          CAView::CAView():m_rectEllipse( 0, 0, 4000, -4000 )
          {
          // TODO: add construction code here
          m_nColor = GRAY_BRUSH;
          }

          void CAView::OnDraw(CDC* pDC)
          {
          pDC->SelectStockObject( m_nColor );
          pDC->Ellipse( m_rectEllipse );
          }
          6、 映射WM_LBUTTONDOWN消息并編輯消息處理函數(shù)OnLButtonDown如下:
          void CAView::OnLButtonDown(UINT nFlags, CPoint point)
          {
          // TODO: Add your message handler code here and/or call default

          CClientDC dc( this );
          OnPrepareDC( &dc );
          CRect rectDevice = m_rectEllipse;
          dc.LPtoDP( rectDevice );
          if( rectDevice.PtInRect( point ) ){
          if( m_nColor = GRAY_BRUSH )
          m_nColor = WHITE_BRUSH;
          else
          m_nColor = GRAY_BRUSH;
          }
          InvalidateRect( rectDevice );
          }
          編譯并運行看看結(jié)果吧。
          另外,我們要特別注意下面五種比較特殊的windows消息:
          1、 WM_CREATE消息
          該消息是windows發(fā)給視圖的第一個消息,由于應(yīng)用程序框架調(diào)用Create函數(shù)時該消息就會被發(fā)送,而此時窗口創(chuàng)建還未完成,因此在Create函數(shù)內(nèi)不能調(diào)用那些依賴于窗口處于完全激活狀態(tài)的windows函數(shù)。不過對于SDI應(yīng)用程序,在視圖生存期間,OnInitialUpdate函數(shù)可以被調(diào)用多次。
          2、 WM_CLOSE消息
          當(dāng)用戶從系統(tǒng)菜單中關(guān)閉窗口或者父窗口被關(guān)閉時,windows會發(fā)送WM_CLOSE消息。
          3、 WM_QUERYENDSESSION消息
          當(dāng)用戶退出windows時,windows就會發(fā)送WM_QUERYENDSESSION消息給正在運行的程序,處理這個消息的映射函數(shù)為OnQueryEndSession。
          4、 WM_DESTROY消息
          Windows在發(fā)送完WM_CLOSE消息后,緊接著就發(fā)送WM_DESTROY消息,消息映射函數(shù)為OnDestroy。當(dāng)程序接收到該消息時,它將假定此時視窗已經(jīng)消失,但仍處于活動狀態(tài)。利用這個消息控制函數(shù),就可以對依賴于當(dāng)前窗口的所有東西作清除工作,不過一定要記住,應(yīng)該用基類的OnDestroy而不能在自己視圖中的OnDestroy中"終止"窗口的析構(gòu)過程,終止析構(gòu)的處理應(yīng)該在OnClose函數(shù)中。
          5、 WM_NCDESTROY消息
          當(dāng)窗口被取消時發(fā)送的最后一個消息就是這個消息,由于此時所有的窗口都被關(guān)閉,所以我們可以在OnNcDestroy函數(shù)中做一些不依賴于窗口是否處于激活狀態(tài)的最后處理工作,不過一定要調(diào)用基類的OnNcDestroy函數(shù)。不要在OnNcDestroy中取消動態(tài)申請的窗口對象,這一工作是由CWnd的一個特殊虛函數(shù)PostNcDestroy來完成的,它是由基類的OnNcDestroy來調(diào)用的。何時取消窗口對象最為合適呢,去看MFC的聯(lián)機文檔吧!

          Top of Page

          第八天 設(shè)備環(huán)境類

            任何程序在畫圖時都需要調(diào)用圖形設(shè)備接口( GDI )函數(shù), GDI 包含了一些繪制點、線、矩形、橢圓、位圖以及文本的函數(shù)。 Windows 的設(shè)備環(huán)境是 GDI 的關(guān)鍵元素,它代表了物理設(shè)備,每一個 C++ 設(shè)備環(huán)境對象都有與之對應(yīng)的 Windows 設(shè)備環(huán)境,并通過一個 32 位的 HDC 句柄來標識。

            MFC 中的基類 CDC 包含了繪圖所需要的所有成員函數(shù),并且除了 CMetaFileDC 類外,所有的派生類都只有構(gòu)造函數(shù)和析構(gòu)函數(shù)不同。對于顯示器來說,常用的派生類有 CClientDC 和 CWindowDC 。

            顯示設(shè)備環(huán)境的類 CClientDC 和 CWindowDC , CClientDC 類繪圖只局限于客戶區(qū)域內(nèi),即不包含邊框、菜單欄和標題欄,而 CWindowDC 類可以。簡單來說,如果創(chuàng)建 CclientDC 對象,點( 0,0 )指客戶區(qū)域的左上角,如果創(chuàng)建的是 CWindowDC 對象,則點( 0,0 )指整個屏幕的左上角。

            在創(chuàng)建 CDC 對象的時候,不要忘記在合適的時候?qū)⑺鼊h除,不然程序在退出之前有小部分內(nèi)存就會丟失。要保證設(shè)備環(huán)境對象能夠被適時的刪除,可以有兩種方法:

          一種是在堆棧中構(gòu)造對象,比如在 OnLButtonDown 函數(shù)中,它的析構(gòu)函數(shù)在函數(shù)返回時自動被調(diào)用。

          void CMyView::OnLButtonDown(UINT nFlags,CPoint point){

          CRect rect;

          CClientDC dc(this); //constructs dc on the stack

          } //dc automatically destroyed

          另一種是通過調(diào)用 CWnd 的成員函數(shù) GetDC 來獲得設(shè)備環(huán)境指針,但此時必須要調(diào)用 RleaseDC 來釋放設(shè)備環(huán)境。

          void CMyView::OnLButtonDown(UINT nFlags,CPoint point){

          CRect rect;

          CDC *pDC=GetDC();

          pDC->GetClipBox(rect);

          ReleaseDC(pDC); // 不要忘了這句

          }

          注意:千萬不要刪除作為參數(shù)以指針形式傳遞給 OnDraw 函數(shù)的 CDC 對象,應(yīng)用程序框架會自動控制它的刪除。

          在繪圖時我們離不開設(shè)備環(huán)境,那么在繪圖時我們就要依賴于設(shè)備環(huán)境的當(dāng)前狀態(tài),這種狀態(tài)包括:

          •  被選中的 GDI 繪圖對象,如筆、刷子和字體等

          •  繪圖時的縮放尺寸的映射模式

          •  其他各種細節(jié),如文本的對齊方式,多邊形的填充狀態(tài)

            創(chuàng)建設(shè)備環(huán)境對象時,通常會有些默認的特性,而其他特性都是通過 CDC 類的成員函數(shù)來設(shè)定的,可以通過重載 SelectObject 函數(shù)來將 GDI 對象選進設(shè)備環(huán)境中。

            如果我們要重新編寫 OnPaint 函數(shù),就需要使用 CPaintDC 類,這個類是比較特殊的,它的構(gòu)造函數(shù)和析構(gòu)函數(shù)所完成的工作都是針對顯示用的,當(dāng)我們一旦獲得一個 CDC 指針,就可以把它當(dāng)成任何設(shè)備環(huán)境指針來用。

          Top of Page

          第九天 GDI對象

            所有 GDI 對象類都是由抽象基類 CGdiObject 派生出來的。下面是 GDI 派生類列表:

            CBitmap - 位圖是一種位矩陣,每一個顯示像素都對應(yīng)一個或多個位,我們可以用位圖來表示圖像,也可以用它來創(chuàng)建刷子。

          CBrush - 刷子定義了一種位圖形式的像素,用它可以對區(qū)域內(nèi)部填充顏色。

          CFont - 字體是一種具有某種風(fēng)格和尺寸的所有字符的集合。

          CPalette - 調(diào)色板是一種顏色映射接口。

          CPen - 筆是一種畫線和有形邊框的工具,可以指定畫線的寬度,以及畫虛線,實線等。

          CRgn - 區(qū)域是一種范圍,可以用它來填充、裁剪以及鼠標點中測試。

            我們只需要構(gòu)造 CGdiObject 類的派生類對象,而無需構(gòu)造它的對象,有些 GDI 派生類允許構(gòu)造函數(shù)一步完成創(chuàng)建對象的任務(wù),如 CPen 和 CBrush 。而有些派生類的對象要兩步,如 CFont 和 CRgn ,首先要調(diào)用默認的構(gòu)造函數(shù),然后還要調(diào)用相應(yīng)的創(chuàng)建函數(shù),如 CreateFont 、 CreatePolygonRgn 等。

            CGdiObject 類有一個虛析構(gòu)函數(shù),如果構(gòu)造了一個它的派生類的對象,則在程序退出之前要將其刪除,為了刪除它,要先將其從設(shè)備環(huán)境中分離出來。那么如何分離呢?其實, CDC 類的 SelectObject 成員函數(shù)在將 GDI 對象選進設(shè)備環(huán)境的同時,它已經(jīng)從設(shè)備環(huán)境中分離出來了,但在未選中新的對象前,還不能將舊的對象分離。所以在選進自己的 GDI 對象時,將原來的 GDI 對象也保存起來,任務(wù)完成后,再將其恢復(fù),這樣就可以將自己的 GDI 對象分離并刪除了。下面看一個例子:

          void CMyView::OnDraw( CDC *pDC ){

          CPen newPen( PS_DASHDOTDOT, 2, (COLORREF)0); //black 2 pixels wide

          CPen * pOldPen = pDC->SelectObject( &newPen );

          pDC->MoveTo( 10, 10 );

          pDC->LineTo( 110, 10 );

          pDC->SelectObject( pOldPen ); //newPen 被分離

          } //newPen 在函數(shù)退出時自動刪除

            對于一些庫存的 GDI 對象,由于它們是 windows 系統(tǒng)的一部分,因此我沒有必要刪除它們。 MFC 庫函數(shù) SelectStockObject 可以將一個庫存對象選進設(shè)備環(huán)境中,并返回原先被選中對象的指針,同時使該對象被分離。在上例中,我們就可以用庫存對象代替“舊”對象:

          void CMyView::OnDraw( CDC *pDC ){

          CPen newPen( PS_DASHDOTDOT, 2, (COLORREF)0); //black 2 pixels wide

          pDC->MoveTo( 10, 10 );

          pDC->LineTo( 110, 10 );

          pDC->SelectStockObject( BLACK_PEN ); //newPen 被分離

          } //newPen 在函數(shù)退出時自動刪除

            對于顯示設(shè)備環(huán)境來說,在每個消息控制函數(shù)的入口處,設(shè)備環(huán)境都是未被初始化的,因此每次都必須從頭開始設(shè)置設(shè)備環(huán)境,由于 SelectObject 返回的 GDI 對象指針的臨時性,而應(yīng)用程序框架在函數(shù)返回時會刪除 C++ 臨時對象指針,所以不能簡單地將設(shè)備環(huán)境指針保存在類的數(shù)據(jù)成員中,而要借助于 GetSafeHandle 成員函數(shù)來將它轉(zhuǎn)換為 windows 句柄(唯一能夠持久存在的 GDI 標識)。

            注意,當(dāng)刪除由 SelectObject 返回的指針所指向的對象時,一定要當(dāng)心,如果該對象是我們自己申請的,可以刪除,如果是臨時的,則不能隨便刪除。

          posted @ 2008-08-26 03:27 小強摩羯座 閱讀(257) | 評論 (0)編輯 收藏

               摘要: (1) 如何通過代碼獲得應(yīng)用程序主窗口的 指針? 主窗口的 指針保存在CWinThread::m_pMainWnd中,調(diào)用AfxGetMainWnd實現(xiàn)。 AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED) //使程序最大化. ...  閱讀全文

          posted @ 2008-08-26 02:59 小強摩羯座 閱讀(332) | 評論 (0)編輯 收藏

          中國絕美情詩名句排行榜TOP100

          1 柳永 鳳棲梧 衣帶漸寬終不悔,為伊消得人憔悴。

          2 佚名 擊鼓《詩經(jīng).邶風(fēng)》 死生契闊,與子成說。執(zhí)子之手,與子偕老。

          3 秦觀 鵲橋仙 兩情若是久長時,又豈在朝朝暮暮。

          4 李白 三五七言 相思相見知何日?此時此夜難為情。

          5 佚名 鳳求凰,琴歌 有美人兮,見之不忘,一日不見兮,思之如狂。

          6 鄭愁予 賦別 這次我離開你,是風(fēng),是雨,是夜晚;你笑了笑,我擺一擺手,一條寂寞的路便展向兩頭了。

          7 李白 三五七言 入我相思門,知我相思苦,長相思兮長相憶,短相思兮無窮極。

          8 元稹 離思五首其四 曾經(jīng)滄海難為水,除卻巫山不是云。

          9 曹植 明月上高樓 君若揚路塵,妾若濁水泥,浮沈各異勢,會合何時諧?

          10 納蘭性德 虞美人 凄涼別後兩應(yīng)同,最是不勝清怨月明中。

          11 張籍 節(jié)婦吟 還君明珠雙淚垂,恨不相逢未嫁時。

          12 席慕蓉 一棵開花的樹 如何讓你遇見我,在我最美麗的時刻為這,我已在佛前求了五百年,求他讓我們結(jié)一段塵緣。

          13 陳衡恪 題春綺遺像 嗟余只影系人間,如何同生不同死?

          14 梁啟超 臺灣竹枝詞 相思樹底說相思,思郎恨郎郎不知。

          15 徐干 室思 自君之出矣,明鏡暗不治。思君如流水,何有窮已時。

          16 司馬光 西江月 相見爭如不見,有情何似無情。

          17 龔自珍 己亥雜詩 落紅不是無情物,化作春泥更護花。

          18 張先 千秋歲 天不老,情難絕。心似雙絲網(wǎng),中有千千結(jié)。

          19 黃景仁 綺懷詩二首其一 似此星辰非昨夜,為誰風(fēng)露立中宵。

          20 李商隱 無題六首其三 直道相思了無益,未妨惆悵是清狂。

          21 李商隱 暮秋獨游曲江 深知身在情長在,悵望江頭江水聲。

          22 納蘭性德 攤破浣溪沙 人到情多情轉(zhuǎn)薄,而今真?zhèn)€不多情。

          23 李商隱 錦瑟 此情可待成追憶,只是當(dāng)時已惘然。

          24 張仲素 燕子樓 相思一夜情多少,地角天涯未是長。

          25 元好問 摸魚兒二首其一 問世間,情是何物,直教生死相許。

          26 李商隱 無題 身無彩鳳雙飛翼,心有靈犀一點通。

          27 張可久 塞鴻秋 獸爐沈水煙,翠沼殘花片,一行行寫入相思傳。

          28 徐再思 折桂令 平生不會相思,才會相思,便害相思。

          29 李冠 蝶戀花 一寸相思千萬緒,人間沒箇安排處。

          30 蘇軾 江城子 十年生死兩茫茫,不思量,自難忘,千里孤墳,無處話凄涼。

          31 佚名 綢繆《詩經(jīng).唐風(fēng)》 今夕何夕,見此良人。

          32 白居易 長恨歌 天長地久有時盡,此恨綿綿無絕期。

          33 白居易 長恨歌 在天愿作比翼鳥,在地愿為連理枝。

          34 文廷式 蝶戀花 重疊淚痕緘錦字,人生只有情難死。

          35 曹雪芹 枉凝眉 一個是閬苑仙葩,一個是美玉無瑕。若說沒奇緣,今生偏又遇著他;若說有奇緣,如何心事終虛話?

          36 李商隱 無題 春蠶到死絲方盡,蠟炬成灰淚始乾。

          37 況周頤 減字浣溪沙 他生莫作有情癡,人間無地著相思。

          38 歐陽修 玉樓春 尊前擬把歸期說,未語春容先慘咽。

          39 佚名 關(guān)雎《詩經(jīng).周南》 關(guān)關(guān)雎鳩,在河之洲。窈宨淑女,君子好逑。

          40 歐陽修 玉樓春 人生自是有情癡,此恨不關(guān)風(fēng)與月。

          41 柳永 雨霖鈴 此去經(jīng)年,應(yīng)是良辰好景虛設(shè)。便縱有,千種風(fēng)情,更與何人說。

          42 李之儀 卜算子 只愿君心似我心,定不負相思意。

          43 晏幾道 臨江仙二首其二 落花人獨立,微雨燕雙飛。

          44 陳陶 隴西行 可憐無定河邊骨,猶是春閨夢裏人。

          45 辛棄疾 摸魚兒 千金縱買相如賦,脈脈此情誰訴。

          46 溫庭筠 更漏子三首其三 梧桐樹,三更雨,不道離情正苦。一葉葉,一聲聲,空階滴到明。

          47 蘇武 結(jié)發(fā)為夫妻 結(jié)發(fā)為夫妻,恩愛兩不疑。

          48 聶勝瓊 鷓鴣天 尋好夢,夢難成。況誰知我此時情。枕前淚共簾前雨,隔箇窗兒滴到明。

          49 柳永 晝夜樂 一場寂寞憑誰訴。算前言,總輕負。

          50 李白 長相思二首其一 天長路遠魂飛苦,夢魂不到關(guān)山難,長相思,摧心肝。

          51 席慕蓉 印記 不要因為也許會改變,就不肯說那句美麗的誓言,不要因為也許會分離,就不敢求一次傾心的相遇。

          52 范成大 車遙遙篇 愿我如星君如月,夜夜流光相皎潔。

          53 戴叔倫 相思曲 魚沈雁杳天涯路,始信人間別離苦。

          54 柳永 雨霖鈴 執(zhí)手相看淚眼,竟無語凝噎。

          55 元稹 遣悲懷三首其二 誠知此恨人人有,貧賤夫妻百事哀。

          56 顧敻 訴衷情 換我心,為你心,始知相憶深。

          57 魚玄機 江陵愁望有寄 憶君心似西江水,日夜東流無歇時。

          58 李商隱 無題六首其六 春心莫共花爭發(fā),一寸相思一寸灰。

          59 樂婉 卜算子 相思似海深,舊事如天遠。

          60 白居易 浪淘沙 相恨不如潮有信,相思始覺海非深。

          61 溫庭筠 新添聲楊柳枝 玲瓏骰子安紅豆,入骨相思知不知?

          62 邵瑞彭 蝶戀花 忍把千金酬一笑?畢竟相思,不似相逢好。

          63 晏殊 玉樓春 天涯地角有窮時,只有相思無盡處。

          64 曹雪芹 終身誤 都道是金玉良緣,俺只念木石前盟??諏χ街懈呤烤К撗?;終不忘,世外仙姝寂寞林。

          65 周邦彥 玉樓春 人如風(fēng)後入江云,情似雨馀黏地絮。

          66 曹雪芹 紅豆詞 滴不盡相思血淚拋紅豆,開不完春柳春花滿畫樓。

          67 歐陽修 蝶戀花二首其一 淚眼問花花不語,亂紅飛過秋千去。

          68 馮小青 怨 瘦影自憐秋水照,卿須憐我我憐卿。

          69 朱彝尊 高陽臺 鍾情怕到相思路。盼長堤,草盡紅心。動愁吟,碧落黃泉,兩處難尋。

          70 賀鑄 橫塘路 若問閑情都幾許?一川煙草,滿城風(fēng)絮,梅子黃時雨。

          71 張泌 寄人 多情只有春庭月,猶為離人照落花。

          72 劉禹錫 竹枝詞四首其二 花紅易衰似郎意,水流無限似儂愁。

          73 晏殊 山亭柳:贈歌者 若有知音見采,不辭遍唱陽春。

          74 范仲淹 蘇幕遮 明月樓高休獨倚,酒入愁腸,化作相思淚。

          75 陳叔達 自君之出矣 思君如明燭,煎心且銜淚。

          76 蘇武 結(jié)發(fā)為夫妻 生當(dāng)復(fù)來歸,死當(dāng)長相思。

          77 陳蓬姐 寄外二首其二 休言半紙無多重,萬斛離愁盡耐擔(dān)。

          78 朱彝尊 鴛鴦湖棹歌 妾似胥山長在眼,郎如石佛本無心。

          79 韋莊 女冠子二首其一 不知魂已斷,空有夢相隨。除卻天邊月,沒人知。

          80 佚名 涉江采芙蓉《古詩十九首》 同心而離居,憂傷以終老。

          81 秦觀 八六子 夜月一簾幽夢,春風(fēng)十里柔情。

          82 晏幾道 鷓鴣天三首其一 從別後,憶相逢,幾回魂夢與君同。

          83 柳永 雨霖鈴 多情自古傷離別。更那堪,冷落清秋節(jié)。

          84 晏殊 玉樓春 無情不似多情苦,一寸還成千萬縷。

          85 元稹 遣悲懷三首其三 唯將終夜長開眼,報答平生未展眉。

          86 韋莊 應(yīng)天長 別來半歲音書絕,一寸離腸千萬結(jié)。

          87 盧仝 有所思 相思一夜梅花發(fā),忽到窗前疑是君。

          88 盧仝 樓上女兒曲 直緣感君恩愛一回顧,使我雙淚長珊珊。

          89 晏幾道 鷓鴣天三首其二 相思本是無憑語,莫向花牋費淚行。

          90 歐陽修 踏莎行 離愁漸遠漸無窮,迢迢不斷如春水。

          91 辛棄疾 鷓鴣天 若教眼底無離恨,不信人間有白頭。

          92 曹雪芹 紅樓夢引子 開辟鴻蒙,誰為情種?都只為風(fēng)月情濃。

          93 晏殊 鵲踏枝 明月不諳離恨苦,斜光到曉穿朱戶。

          94 白居易 長恨歌 臨別殷勤重寄詞,詞中有誓兩心知。

          95 陳端生 寄外 淚縱能乾終有跡,語多難寄反無詞。

          96 蘇曼殊 本事詩 還卿一缽無情淚,恨不相逢未剃時。

          97 溫庭筠 南歌子四首其二 終日兩相思,為君憔悴盡,百花時。

          98 晏殊 鵲踏枝 欲寄彩箋兼尺素,山長水闊知何處。

          99 李煜 清平樂 離恨卻如春草,更行更遠還生。

          100 晏殊 清平樂二首其二 鴻雁在云魚在水,惆悵此情難寄。

          posted @ 2008-07-31 22:32 小強摩羯座 閱讀(218) | 評論 (0)編輯 收藏

          僅列出標題
          共20頁: First 上一頁 8 9 10 11 12 13 14 15 16 下一頁 Last 
          主站蜘蛛池模板: 临西县| 开江县| 襄汾县| 思茅市| 澄迈县| 浦东新区| 开江县| 南华县| 化州市| 江油市| 缙云县| 辽宁省| 象山县| 滦南县| 易门县| 调兵山市| 临夏市| 恩施市| 健康| 金山区| 梁河县| 灵石县| 哈尔滨市| 图木舒克市| 靖边县| 黑龙江省| 澄江县| 邯郸市| 平定县| 凤台县| 吉安市| 泰顺县| 南康市| 永城市| 吴川市| 望江县| 新平| 额敏县| 万盛区| 闽清县| 大厂|