學習windows編程 day4 之 自訂映射

來源:互聯網
上載者:User

標籤:tor   iso   color   toe   str   imap   視圖   視窗   編程   

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){    HDC hdc;    PAINTSTRUCT ps;    RECT rect;    int iMapMode;    static int cxClient, cyClient;    switch (message)    {    case WM_SIZE:        cxClient = LOWORD(lParam);        cyClient = HIWORD(lParam);        break;    case WM_PAINT:        hdc = BeginPaint(hwnd, &ps);        GetClientRect(hwnd, &rect);//建立自訂映射                iMapMode = GetMapMode(hdc);        SetMapMode(hdc, MM_ISOTROPIC);    //各向同性(會去幹預映射過程,將多餘裁剪)        //SetMapMode(hdc, MM_ANISOTROPIC);    //各向異性(不會去幹預,會自適應)        SetWindowExtEx(hdc, 100, 100, NULL);            //相當於取出原來邏輯視窗的100*100像素放大為現在視口的1/2*1/2(1/4) 所以現在視口所顯示的最大尺寸為200*200        SetViewportExtEx(hdc, cxClient / 2, cyClient / 2, NULL);        //設定視口原點在中心        SetViewportOrgEx(hdc, cxClient / 2, cyClient / 2, NULL);        //MM_ISOTROPIC: windows為了保證按比例將整個視口落在視圖中,會將多餘的尺寸排除在外,若是有背景,則多餘為黑色,會以最大比例佔據視窗(前提是和原來設定和視口和視窗之比不變的前提下)        //MM_ANISOTROPIC:則不會,而是成比例展開        Rectangle(hdc, -100, -100, 100, 100);        Ellipse(hdc, -80, -80, 80, 80);        EndPaint(hwnd, &ps);        break;    case WM_DESTROY:        PostQuitMessage(0);        return 0;    }    return DefWindowProc(hwnd, message, wParam, lParam);}

 上面只修改了大小對應,下面則修改了方向:

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){    HDC hdc;    PAINTSTRUCT ps;    RECT rect;    int iMapMode;    static int cxClient, cyClient;    switch (message)    {    case WM_SIZE:        cxClient = LOWORD(lParam);        cyClient = HIWORD(lParam);        break;    case WM_PAINT:        hdc = BeginPaint(hwnd, &ps);        GetClientRect(hwnd, &rect);//建立自訂映射                iMapMode = GetMapMode(hdc);        //SetMapMode(hdc, MM_ISOTROPIC);    //各向同性(會去幹預映射過程,將多餘裁剪)        SetMapMode(hdc, MM_ANISOTROPIC);    //各向異性(不會去幹預,會自適應)        SetWindowExtEx(hdc, 100, 100, NULL);            //相當於取出原來邏輯視窗的100*100像素放大為現在視口的1/2*1/2(1/4) 所以現在視口所顯示的最大尺寸為200*200                //修改這裡兩個值得正負可以修改視口的x,y指向        //預設MM_TEXT    x向右為正    y向下為正        SetViewportExtEx(hdc, cxClient / 2, cyClient / 2, NULL);        //修改後        x向左為正    y向上為正        SetViewportExtEx(hdc, -cxClient / 2, -cyClient / 2, NULL);        //....        //設定視口原點在中心        SetViewportOrgEx(hdc, cxClient / 2, cyClient / 2, NULL);        //MM_ISOTROPIC: windows為了保證按比例將整個視口落在視圖中,會將多餘的尺寸排除在外,若是有背景,則多餘為黑色,會以最大比例佔據視窗(前提是和原來設定和視口和視窗之比不變的前提下)        //MM_ANISOTROPIC:則不會,而是成比例展開        Rectangle(hdc, -100, -100, 100, 100);        Ellipse(hdc, -80, -80, 80, 80);        //發現採用預設MM_TEXT方式        TextOut(hdc, -40, -40, L"Love", 4);        TextOut(hdc, 40, 40, L"HAHA", 4);        MoveToEx(hdc, 0, -100, NULL);        LineTo(hdc, 0, 100);        MoveToEx(hdc, -100, 0, NULL);        LineTo(hdc, 100, 0);        EndPaint(hwnd, &ps);        break;    case WM_DESTROY:        PostQuitMessage(0);        return 0;    }    return DefWindowProc(hwnd, message, wParam, lParam);}

 

學習windows編程 day4 之 自訂映射

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.