久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

        手機(jī)站
        千鋒教育

        千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

        千鋒教育

        掃一掃進(jìn)入千鋒手機(jī)站

        領(lǐng)取全套視頻
        千鋒教育

        關(guān)注千鋒學(xué)習(xí)站小程序
        隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

        當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > GDI+Window詳解

        GDI+Window詳解

        來(lái)源:千鋒教育
        發(fā)布人:xqq
        時(shí)間: 2023-11-22 08:16:21 1700612181

        一、GDI Windows

        GDI+(Graphics Device Interface)Windows是微軟公司推出的一組圖像處理API。該API使用GDI的基本功能,加上更多的屬性和方法,可以完成更多高級(jí)圖像處理任務(wù)。它被廣泛應(yīng)用于Windows應(yīng)用程序的圖形處理,如游戲開發(fā)、廣告設(shè)計(jì)等。其中,開發(fā)GDI+Window應(yīng)用程序,需要注意以下幾點(diǎn):

        1、創(chuàng)建GDI+Window

        
        HWND hWnd;    //窗口句柄
        HDC hdcMem;    //內(nèi)存設(shè)備上下文句柄 
        Graphics * graphics;    //圖形對(duì)象指針
        Image * image;    //繪制的圖片
        ULONG_PTR token;   //token值,用于初始化GDI+  
        
        //初始化GDI+
        GdiplusStartupInput gdiplusStartupInput;
        GdiplusStartup(&token, &gdiplusStartupInput, NULL);
        
        //創(chuàng)建窗口
        WNDCLASSEX wcex;
        wcex.cbSize = sizeof(WNDCLASSEX);
        wcex.style = CS_HREDRAW | CS_VREDRAW;
        wcex.lpfnWndProc = WndProc;
        wcex.cbClsExtra = 0;
        wcex.cbWndExtra = 0;
        wcex.hInstance = hInstance;
        wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON));
        wcex.hCursor = LoadCursor(hInstance, MAKEINTRESOURCE(IDC_CURSOR));
        wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
        wcex.lpszMenuName = NULL;
        wcex.lpszClassName = szWindowClass;
        wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
        RegisterClassEx(&wcex);
        
        //創(chuàng)建窗口
        hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
        
        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);
        

        2、繪制GDI+圖像

        
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hWnd, &ps);
        
        //創(chuàng)建內(nèi)存設(shè)備上下文
        hdcMem = CreateCompatibleDC(hdc);
        RECT rc;
        GetClientRect(hWnd, &rc);
        
        //創(chuàng)建Graphics對(duì)象
        graphics = new Graphics(hdcMem);
        
        //創(chuàng)建Image對(duì)象
        image = Image::FromFile(L"path_to_image");
        
        //繪制圖像
        graphics->DrawImage(image, 0, 0, rc.right - rc.left, rc.bottom - rc.top);
        
        //釋放資源
        delete image;
        delete graphics;
        DeleteDC(hdcMem);
        
        EndPaint(hWnd, &ps);
        

        3、處理GDI+事件

        
        LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
        {
            switch (message)
            {
            case WM_PAINT:
                OnPaint(hWnd);
                break;
            case WM_DESTROY:
                GdiplusShutdown(token);
                PostQuitMessage(0);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
            return 0;
        }
        
        void OnPaint(HWND hWnd)
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);
        
            //創(chuàng)建內(nèi)存設(shè)備上下文
            hdcMem = CreateCompatibleDC(hdc);
            RECT rc;
            GetClientRect(hWnd, &rc);
        
            //創(chuàng)建Graphics對(duì)象
            graphics = new Graphics(hdcMem);
        
            //創(chuàng)建Image對(duì)象
            image = Image::FromFile(L"path_to_image");
        
            //繪制圖像
            graphics->DrawImage(image, 0, 0, rc.right - rc.left, rc.bottom - rc.top);
        
            //釋放資源
            delete image;
            delete graphics;
            DeleteDC(hdcMem);
        
            EndPaint(hWnd, &ps);
        }
        

        二、GDI+Window阻止關(guān)機(jī)

        在使用GDI+Window的時(shí)候,可能會(huì)遇到突然關(guān)機(jī)的情況,這時(shí)就需要防止突然關(guān)機(jī)引起的數(shù)據(jù)損壞??梢允褂肧etConsoleCtrlHandler函數(shù),注冊(cè)一個(gè)控制信號(hào)處理函數(shù)。例如:

        
        BOOL WINAPI ConsoleCtrlHandler(DWORD dwCtrlType)
        {
            GdiplusShutdown(token);
            switch (dwCtrlType)
            {
            case CTRL_C_EVENT:
                printf("Ctrl-C event\n\n");
                return TRUE;
            case CTRL_CLOSE_EVENT:
                printf("Ctrl-Close event\n\n");
                return TRUE;
            case CTRL_BREAK_EVENT:
                printf("Ctrl-Break event\n\n");
                return TRUE;
            case CTRL_LOGOFF_EVENT:
                printf("Ctrl-Logoff event\n\n");
                return TRUE;
            case CTRL_SHUTDOWN_EVENT:
                printf("Ctrl-Shutdown event\n\n");
                return TRUE;
            default:
                return FALSE;
            }
        }
        
        int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
        {
            //初始化GDI+
            GdiplusStartupInput gdiplusStartupInput;
            GdiplusStartup(&token, &gdiplusStartupInput, NULL);
        
            //處理控制信號(hào)
            SetConsoleCtrlHandler((PHANDLER_ROUTINE)ConsoleCtrlHandler, TRUE);
        
            //創(chuàng)建窗口...
        }
        

        三、GDI+Window內(nèi)存不能讀

        如果在使用GDI+Window時(shí),遇到“內(nèi)存不能讀”或者“內(nèi)存泄漏”的情況,可能是由于內(nèi)存分配過(guò)多、內(nèi)存越界、變量未初始化等問(wèn)題引起的,可以使用內(nèi)存泄漏檢測(cè)工具進(jìn)行檢查。例如,使用CrtDbg工具進(jìn)行檢測(cè):

        
        #define _CRTDBG_MAP_ALLOC
        #include 
        #include 
        
        int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
        {
            //_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
            _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
            _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
        
            //創(chuàng)建窗口...
        
            _CrtDumpMemoryLeaks();
            return 0;
        }
        

        四、GDI Window是怎么按出來(lái)的

        GDI+Window是通過(guò)對(duì)GDI的拓展可以實(shí)現(xiàn)更多圖像處理任務(wù)。在Windows操作系統(tǒng)中,可以通過(guò)CreateWindowEx函數(shù)來(lái)創(chuàng)建一個(gè)窗口,并使用GDI+對(duì)圖像進(jìn)行處理。

        五、GDI+Windowed

        GDI+Windowed是指使用GDI+對(duì)Windows窗口進(jìn)行圖像處理。它可以用來(lái)實(shí)現(xiàn)游戲開發(fā)、廣告設(shè)計(jì)等,也可以用來(lái)進(jìn)行圖像展示。

        六、GDI+ Windows未關(guān)閉

        在使用GDI+Window時(shí),可以遇到突然關(guān)機(jī)的情況。為了防止突然關(guān)機(jī)引起的數(shù)據(jù)損壞,可以使用SetConsoleCtrlHandler函數(shù),注冊(cè)一個(gè)控制信號(hào)處理函數(shù)。例如:

        
        BOOL WINAPI ConsoleCtrlHandler(DWORD dwCtrlType)
        {
            GdiplusShutdown(token);
            switch (dwCtrlType)
            {
            case CTRL_C_EVENT:
                printf("Ctrl-C event\n\n");
                return TRUE;
            case CTRL_CLOSE_EVENT:
                printf("Ctrl-Close event\n\n");
                return TRUE;
            case CTRL_BREAK_EVENT:
                printf("Ctrl-Break event\n\n");
                return TRUE;
            case CTRL_LOGOFF_EVENT:
                printf("Ctrl-Logoff event\n\n");
                return TRUE;
            case CTRL_SHUTDOWN_EVENT:
                printf("Ctrl-Shutdown event\n\n");
                return TRUE;
            default:
                return FALSE;
            }
        }
        
        int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
        {
            //初始化GDI+
            GdiplusStartupInput gdiplusStartupInput;
            GdiplusStartup(&token, &gdiplusStartupInput, NULL);
        
            //處理控制信號(hào)
            SetConsoleCtrlHandler((PHANDLER_ROUTINE)ConsoleCtrlHandler, TRUE);
        
            //創(chuàng)建窗口...
        }
        

        七、GDI Windows什么意思

        GDI(Graphics Device Interface)是Windows操作系統(tǒng)中的一個(gè)圖形設(shè)備接口,是操作系統(tǒng)和圖形設(shè)備之間的一個(gè)數(shù)據(jù)交換接口。它提供了一個(gè)標(biāo)準(zhǔn)的方式,將應(yīng)用程序提供的圖形數(shù)據(jù)發(fā)送到圖形設(shè)備上進(jìn)行顯示。而GDI+ Windows是微軟公司推出的一組圖像處理API,使用GDI的基本功能,加上更多的屬性和方法,可以完成更多高級(jí)圖像處理任務(wù)。

        八、GDI Window是什么意思

        GDI(Graphics Device Interface)是Windows操作系統(tǒng)中的一個(gè)圖形設(shè)備接口,是操作系統(tǒng)和圖形設(shè)備之間的一個(gè)數(shù)據(jù)交換接口。而GDI+ Window是對(duì)GDI的拓展,可以實(shí)現(xiàn)更多高級(jí)圖像處理任務(wù)的一組圖像處理API。

        tags: g*power
        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
        請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
        免費(fèi)領(lǐng)取
        今日已有369人領(lǐng)取成功
        劉同學(xué) 138****2860 剛剛成功領(lǐng)取
        王同學(xué) 131****2015 剛剛成功領(lǐng)取
        張同學(xué) 133****4652 剛剛成功領(lǐng)取
        李同學(xué) 135****8607 剛剛成功領(lǐng)取
        楊同學(xué) 132****5667 剛剛成功領(lǐng)取
        岳同學(xué) 134****6652 剛剛成功領(lǐng)取
        梁同學(xué) 157****2950 剛剛成功領(lǐng)取
        劉同學(xué) 189****1015 剛剛成功領(lǐng)取
        張同學(xué) 155****4678 剛剛成功領(lǐng)取
        鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
        董同學(xué) 138****2867 剛剛成功領(lǐng)取
        周同學(xué) 136****3602 剛剛成功領(lǐng)取
        相關(guān)推薦HOT
        sort函數(shù)頭文件用法介紹

        一、sort函數(shù)頭文件概述sort函數(shù)頭文件是C++STL中的一個(gè)頭文件,包含了一系列的排序函數(shù)。sort函數(shù)是對(duì)一個(gè)指定區(qū)間內(nèi)的元素進(jìn)行排序的函數(shù),通...詳情>>

        2023-11-22 11:01:57
        Grafana中文界面詳解

        一、Grafana中文界面簡(jiǎn)介Grafana是一個(gè)可視化的開源數(shù)據(jù)分析和監(jiān)控工具,其圖形化界面可以幫助用戶更好地展現(xiàn)、分析數(shù)據(jù),并針對(duì)數(shù)據(jù)建立儀表盤...詳情>>

        2023-11-22 10:40:21
        Direct.h的全面介紹

        一、direct.h路徑direct.h是Windows下一個(gè)C/C++語(yǔ)言頭文件,所以在使用前需要引入該頭文件。在Visual Studio中,點(diǎn)擊“項(xiàng)目”-“屬性”-“C/C++...詳情>>

        2023-11-22 10:25:57
        Bat腳本中文亂碼問(wèn)題詳解

        一、含中文路徑引起的亂碼問(wèn)題1、問(wèn)題描述在編寫bat腳本時(shí),如果路徑中包含中文,那么在執(zhí)行bat腳本時(shí)就會(huì)出現(xiàn)亂碼問(wèn)題,導(dǎo)致腳本無(wú)法正常執(zhí)行...詳情>>

        2023-11-22 10:15:09
        BAT腳本隱藏運(yùn)行窗口詳解

        一、BAT腳本的基本概念BAT腳本是Windows平臺(tái)下的批處理文件,通常以.bat為擴(kuò)展名。它是由DOS命令組合而成的,可以自動(dòng)運(yùn)行一系列的命令,是一種...詳情>>

        2023-11-22 09:57:09
        孟村| 惠安县| 阳朔县| 岳普湖县| 萝北县| 电白县| 武宣县| 兰溪市| 安康市| 蒲江县| 平湖市| 普宁市| 都江堰市| 邢台县| 临海市| 威海市| 海淀区| 内黄县| 澜沧| 息烽县| 惠州市| 大名县| 沙坪坝区| 新乡市| 金湖县| 分宜县| 来凤县| 仙游县| 喀喇沁旗| 彰化县| 图木舒克市| 库车县| 嘉义县| 句容市| 拉孜县| 蛟河市| 尼玛县| 浙江省| 富川| 庆元县| 宁武县|