Я изучаю программирование окон API. Однако я застрял в загрузке изображения и показе в окне.window programming API - LoadImage
#include <windows.h>
#include <stdio.h>
#define wname "mywin"
LRESULT CALLBACK WndProc(HWND h,UINT im,WPARAM wp,LPARAM lp);
int APIENTRY WinMain(HINSTANCE his, HINSTANCE prev,LPSTR cmd, int cshow)
{
WNDCLASS wc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.lpszMenuName=NULL;
wc.style=CS_HREDRAW | CS_VREDRAW;
wc.hInstance = his;
wc.lpszClassName = wname;
wc.lpfnWndProc = (WNDPROC)WndProc;
RegisterClass(&wc);
HWND h = CreateWindow(wname, wname, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, (HMENU) NULL, his, NULL);
ShowWindow(h, cshow);
MSG Message;
while(GetMessage(&Message,0,0,0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
}
LRESULT CALLBACK WndProc(HWND h, UINT im, WPARAM wp, LPARAM lp)
{
HBITMAP static hbm;
HDC static mdc;
BITMAP static bm;
switch(im)
{
case WM_CREATE:
{
hbm = (HBITMAP) LoadImage(NULL, "../img/1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
GetObject(hbm, sizeof(bm), &bm);
if(!hbm)
{
MessageBox(h, "Error loading bitmap", "msg", MB_OK);
}
break;
}
case WM_PAINT:
{
HDC hdc = GetDC(h);
mdc = CreateCompatibleDC(hdc);
SelectObject(mdc, hbm);
BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, mdc, 0, 0, SRCCOPY);
break;
}
}
Я пробовал этот код. Ошибка грамматика отсутствует, но результат является более странным. Изображение появляется, но без окна, и программа остановлена. Я думаю, что проблема находится на части WM_CREATE в 'LRESULT CALLBACK WndProc', но не может точно определить, что не так. ПОМОГИТЕ!!! (WinMain в порядке, здесь нет проблем)
Похоже, вы удалили важную часть программы. Покажите [mcve], пожалуйста. –
Поскольку это так распространено, я не буду публиковать код, просто укажу на то место, где он может быть найден: https://support.microsoft.com/en-us/kb/158898 – KevinDTimm