GDI:
畫畫軟件講解:
4:雙緩衝繪圖:每次頁面刷新的時候,是一個一個的畫出來的,導致最後看起來頁面非常的閃,雙緩衝就是現在一個內存Dc上面畫完,花完之後直接拿過來,一次性顯示出來,這就算是雙緩衝。不同需求可能有三緩衝,多緩衝等,因爲繪圖過程非常多,比較複雜。一般在貼圖的時候,才需要緩衝,一般的簡單的畫,是不需要使用緩衝的。
Win32封裝:
打開文件對話框的創建:
OPENFILENAME ofn = { 0 };
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.lpstrFile = g_PicFilePath;
ofn.nMaxFile = MAX_PATH;
ofn.hwndOwner = hWnd;
ofn.lpstrFilter = TEXT("位圖(*.bmp)\0*.bmp\0"); // 顯示\0過濾器\0顯示\0過濾器\0 最後\0結尾
ofn.nFilterIndex = 1;
ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;
if (GetOpenFileName(&ofn))
{
//打開成功後,對文件的處理
}
Win32加載圖片:
HBITMAP SelBitmap = (HBITMAP)LoadImage(hInst, g_PicFilePath, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);
BITMAP bmp;
GetObject(SelBitmap, sizeof(BITMAP), &bmp);
typedef struct tagBITMAP {
LONG bmType;//必須爲0
LONG bmWidth;//寬
LONG bmHeight;//高
LONG bmWidthBytes;//一橫排圖像佔用的的字節數
WORD bmPlanes;//色彩數
WORD bmBitsPixel;//指示像素顏色需要的位數
LPVOID bmBits;//指向該位圖的指針。
} BITMAP, *PBITMAP;
HANDLE WINAPI LoadImage(
_In_opt_ HINSTANCE hinst,//模塊句柄,就是主函數傳進來的當前進程的實例句柄。
_In_ LPCTSTR lpszName,//圖片的路徑和圖片名
_In_ UINT uType,//圖片類型
_In_ int cxDesired,//指定圖標寬度
_In_ int cyDesired,//高度
_In_ UINT fuLoad//指定圖標屬性,可以輸一系列的組合
);
控件:
控件種類:
HWND hButton7 = CreateWindow(L"BUTTON", L"7", WS_CHILD, 2, ParanH + 2, wx - 4, wy - 4, hWnd, (HMENU)IDC_NUM7, hInst, NULL);//裏面的參數需在外部定義
ShowWindow(hButton7, SW_SHOW);