bmp
-
ich will bei meinem prog beim ein fenster aufrufen wo blos ein bild angezeigt wird und dann nach einer zeit verschwindet oder per klick wäre mir noch lieber. Das problem ich hab keine ahnung wie?
-
Du erstellst ein Fenster mit WS_POPUP, das bewirkt,dass ein Window erzeugt wird, welches nur einen weißen Anwendungsbereich hat, also kein Systemmenü, Titelleiste usw..
Mal in den Anwendungsbereich ein gleich großes bmp (oder skrech es).
Frag dann halt noch in der Prozedur nach WM_LBUTTONDOWN ab,
sende daraufhin WM_QUIT oder WM_DESTROY und du hast das, was du willstEDIT: Rechtschreibfehler
[ Dieser Beitrag wurde am 07.12.2002 um 00:13 Uhr von CAPRI editiert. ]
-
kannst du mir ein bsp. geben
-
ja, kann ich. Im Nachhinein war ich mir jetzt nur net sicher, ob dein Parent
das bmp anzeigen sollte oder ein Child. Ich hab mal beides gemacht:#include <windows.h> LRESULT CALLBACK MsgLoop(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK PicProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); HINSTANCE hInst; HBITMAP hBitmap; BITMAP bitmap; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = "TEST"; HWND hWnd; MSG msg; WNDCLASS wndclass; hInst = hInstance; hBitmap = LoadBitmap(hInst, "DXLOGO"); GetObject(hBitmap, sizeof(BITMAP), &bitmap); const int win_length=256, win_width=256; const int cxScreenMid = GetSystemMetrics(SM_CXSCREEN)/2-win_length/2, cyScreenMid = GetSystemMetrics(SM_CYSCREEN)/2-win_width/2; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hInstance = hInstance; wndclass.lpfnWndProc = MsgLoop; wndclass.lpszClassName = szAppName; wndclass.lpszMenuName = NULL; if(!RegisterClass(&wndclass)) { MessageBox(NULL, "PRG arbeitet mit UNICODE und setzt WinNT voraus!", "szAppName", MB_ICONERROR); return 0; } wndclass.lpfnWndProc = PicProc; wndclass.lpszClassName = "GUDE"; wndclass.hIcon = NULL; RegisterClass(&wndclass); hWnd = CreateWindow( szAppName, "TEST", WS_POPUP, cxScreenMid, cyScreenMid, win_length, win_width, NULL, NULL, hInstance, NULL); ShowWindow(hWnd, iCmdShow); UpdateWindow(hWnd); while(GetMessage(&msg, NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.lParam; } LRESULT CALLBACK MsgLoop(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc, hdcBmp; PAINTSTRUCT ps; static HWND hWndChild; switch(message) { case WM_CREATE: hWndChild = CreateWindow("GUDE", "ChildWindow" , WS_POPUP | WS_VISIBLE , 0,0,256,256, NULL, NULL, hInst, NULL); break; case WM_LBUTTONDOWN: SendMessage(hWnd, WM_DESTROY, 0, 0); break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); hdcBmp = CreateCompatibleDC(hdc); SelectObject(hdcBmp, hBitmap); BitBlt(hdc, 0,0, bitmap.bmWidth, bitmap.bmHeight, hdcBmp, 0,0, SRCCOPY); DeleteDC(hdcBmp); EndPaint(hWnd, &ps); break; case WM_DESTROY: DeleteObject(hBitmap); PostQuitMessage(0); break; } return DefWindowProc(hWnd, message, wParam, lParam); } LRESULT CALLBACK PicProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc, hdcBmp; PAINTSTRUCT ps; switch(message) { case WM_CREATE: Beep(300,300); break; case WM_LBUTTONDOWN: ShowWindow(hWnd, SW_HIDE); break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); hdcBmp = CreateCompatibleDC(hdc); SelectObject(hdcBmp, hBitmap); BitBlt(hdc, 0,0, bitmap.bmWidth, bitmap.bmHeight, hdcBmp, 0,0, SRCCOPY); DeleteDC(hdcBmp); EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; } return DefWindowProc(hWnd, message, wParam, lParam); }
-
danke muss noch einfügen.
Hab aber noch ne andere frage undzwar will ich eine ausgabe machen die tabelarisch ist und es sollen am oberen rand buttons seien, die wenn sie gedrückt werden die ausgabe dementsprechend sortieren. Problem kannst du dir ja denken, keine Ahnung. Wenn du ein tutorial oder ein bsp. hast wäre nett.
-
hm ich hab deins eingefügt und das unter einem child fenster laufen lassen nur wenn ich es einfüge bricht meine Anwendung zusammen.ich hab bei WM_PAINT nur dieses hinzugefügt da ich eine DIB Datei(laut Buch) habe:
case WM_PAINT: { DWORD dwFileSize, dwHighSize, dwBytesRead; HANDLE hFile; hFile = CreateFile ("Bilder\bild.bmp", GENERIC_READ, FILE_SHARE_READ,NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN,0); dwFileSize= GetFileSize (hFile, &dwHighSize); pbmfh= (BITMAPFILEHEADER *) malloc (dwFileSize); ReadFile (hFile, pbmfh, dwFileSize, &dwBytesRead, 0); pbmi = (BITMAPINFO *) (pbmfh +1); pBits = (BYTE *) pbmfh + pbmfh->bfOffBits; cxDib = pbmi -> bmiHeader.biHeight; cxDib = abs(pbmi->bmiHeader.biHeight); HDC hdc = GetDC (hWnd); SetDIBitsToDevice (hdc,0,0,cxDib,cyDib,0,0,0,cyDib,pBits,pbmi,DIB_RGB_COLORS); ReleaseDC(hWnd, hdc); free(pbmfh); } break;