<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jasmine214--love

    只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
    posts - 731, comments - 60, trackbacks - 0, articles - 0

    http://xqscorpion.bokee.com/5172295.html
    最近突然又很有激情的開始看Jeff Prosise的那本"Programming Windows with MFC, 2 ed."。盡管是英文版的,但是感覺這本書上手比喉結的那本所謂的 深入淺出MFC 要容易理解的多。候同學給人一種故弄玄虛故作深沉的感覺,而Jeff Prosise的這本書才真正的稱得上是深入淺出。

    盡管如此,其中有關GDI繪圖中的坐標映射部分還是有一個問題沒有搞清楚,那就是http://xqscorpion.bokee.com/5172295.html。潘愛民翻譯的那本VC內幕沒有講清楚;Jeff Prosise的這本書沒有講清楚;MSDN上的東西看的也是一頭霧水;Charles Petzold的那本書還沒有來得及看。因為這個問題,昨天晚上是帶著遺憾的困惑入睡的。

    總的來說,我對這兩個函數的理解導致的結果是與實際程序運行的結果截然相反。依據MSDN上的解釋,有一個很嚴重的問題沒有闡述清楚,那就是:所謂的SetWindowOrg(x, y)函數,到底是表示set window origin to (x, y)還是set window origin as (x, y);to和as在執行的時候,其操作的效果是截然相反的。

    set window origin to (x, y)表示將坐標原點設置到(x, y);即以(x, y)作為坐標原點,此時原點坐標不再為(0, 0);
    set window origin as (x, y)表示將原來的原點(0, 0)的坐標改為(x, y);即將所有點的坐標增加(+x, +y);

    現在我的理解是:應該是 set window origin to (x, y)。這種理解基于以下幾個前提:
    1. 所有繪圖語句中給出的坐標,全部是邏輯坐標,即在 window 中的坐標(相對于viewport所表示的設備坐標而言);
    2. 所有用戶能看到的點,其設備坐標一定是位于(0, 0)和(1024, 768)范圍內;(假設顯示器為輸出設備,采用MM_TEXT映射方式,且屏幕分辨率為1024*768);
    3. 所謂“(0,0)就原點,原點的坐標一定就是(0,0)”這種理解,是錯誤的;
    4. Viewport中的坐標表示設備坐標;Window中的坐標表示邏輯坐標;
    5. 當在邏輯坐標中指定新的原點后,在執行映射時,設備坐標的原點一定要與邏輯坐標的新原點重合;反過來也是一樣,即兩個坐標系的原點一定要重合。

    下面舉例說明:(MM_TEXT映射模式)


    (1)
    CRect rect(0, 0, 200, 200);
    dc.rectangle(rect);
    上面的語句在屏幕的最左上角繪制一個正方形;(因為此時邏輯坐標與設備坐標沒有偏移)

    (2)
    dc.SetViewportOrg(100, 100);
    CRect rect(0, 0, 200, 200);
    dc.rectangle(rect);
    將設備坐標的原點設置到(100, 100);即設備坐標的原點不在(0, 0)處,而是在(100, 100)處;此時若執行映射的話,邏輯坐標的原點(0, 0)需要與設備坐標的原點(100, 100)重合(參考前提5);那么此時繪制的矩形(0, 0, 200, 200)的坐標(為邏輯坐標,參考前提1)在設備坐標中就會映射為(100, 100, 300, 300),最終我們在顯示器上看到的會是一個向右下方偏移(100, 100)的一個邊長為200的正方形(用戶看到的點是在設備坐標中的,參考前提2)

    (3)
    dc.SetWindowOrg(100, 100);
    CRect rect(0, 0, 200, 200);
    dc.rectangle(rect);
    將邏輯坐標的原點設置到(100, 100);即邏輯坐標的原點不在(0, 0)處,而是在(100, 100)處;此時若執行映射的話,設備坐標的原點(0, 0)需要與邏輯坐標的原點(100, 100)重合(參考前提5);那么此時繪制的矩形(0, 0, 200, 200)的坐標(為邏輯坐標,參考前提1)在設備坐標中就會映射為(-100, -100, 100, 100),最終我們在顯示器上看到的會是一個只有1/4個大小的矩形的一部分(事實上相當于向左上方偏移(100, 100)的一個邊長為200的正方形。注意:用戶看到的點是在設備坐標中的,參考前提2)

    主站蜘蛛池模板: 两性刺激生活片免费视频| 你是我的城池营垒免费观看完整版 | 4虎1515hh永久免费| 亚洲日本一区二区| 免费无码AV电影在线观看| 亚洲色欲或者高潮影院| 亚洲精品午夜国产va久久| 免费一级全黄少妇性色生活片 | 色天使亚洲综合一区二区| 在线播放免费人成视频在线观看| 成全视频免费高清 | 亚洲一级片免费看| 久久亚洲中文字幕精品一区| 久久噜噜噜久久亚洲va久| 久草免费福利视频| 亚洲精品熟女国产| 毛片免费在线视频| 羞羞漫画登录页面免费| 国产国拍精品亚洲AV片| A片在线免费观看| 亚洲欧洲尹人香蕉综合| 永久免费视频v片www| 特级毛片aaaa免费观看| 亚洲精品狼友在线播放| 亚洲免费中文字幕| 久久人午夜亚洲精品无码区| 免费国产污网站在线观看15| 亚洲国产91在线| 免费真实播放国产乱子伦| 九九热久久免费视频| 亚洲第一永久AV网站久久精品男人的天堂AV | 免费在线看v网址| 亚洲.国产.欧美一区二区三区| 亚洲第一区精品观看| 最近免费mv在线电影| 理论亚洲区美一区二区三区| 亚洲色爱图小说专区| 成年性羞羞视频免费观看无限| 国产va免费精品| 亚洲午夜在线一区| 亚洲精品视频久久久|