bild



  • ich will zu begin meines Progs ein Fenster ausgeben hab das hier geschrieben aber es Funktioniert nicht.

    LRESULT CALLBACK PicProc(HWND hWnd, UINT uiMessage, WPARAM wParam,LPARAM lParam)
    {
        HDC hdc, hdcBmp;
        HWND hWndChild;
    
        static BITMAPFILEHEADER *pbmfh;
        static BITMAPINFO *pbmi;
        static BYTE *pBits;
        static int cxDib, cyDib; 
    
        switch(uiMessage)
        {
        case WM_CREATE:
           {
           hWndChild = CreateWindowEx(0,g_szFrontName,"K2K on THC",
                                      WS_OVERLAPPEDWINDOW | WS_POPUP,
                                      CW_USEDEFAULT, CW_USEDEFAULT, 486, 158,
                                      NULL, NULL, hInst, NULL);                                    
            }    
          break;
    
        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.biWidth;
              cyDib = 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);
              return 0;
              }break;
    
        case WM_LBUTTONDOWN:
              PostMessage(hWnd, WM_CLOSE, 0, 0); 
              return 0;                                     
              break;
    
        default : return WndProc (hWnd, uiMessage,wParam,lParam);break;
        }
    }
    


  • Mach das hWndChild mal static. Sonst ist mir eigentlich nix aufgefallen...

    cu



  • Das Fenster wird am Anfang dagestell ohne bild und das Prog. wird dann von Windows beendet. Vielleicht hilfts.



  • du hast ja noch nicht mal BeginPaint und EndPaint in WM_PAINT. Außerdem lädt man kein Bitmap in WM_PAINT. Diese Nachricht wird viel zu oft aufgerufen und kostet dann saumäßig performance. man lädt das einmal! ob der rest jetzt richtig ist weiss ich auch nicht, aber warum machst du es nicht einfach mit LoadImage und BitBlt? 😕



  • steht nicht in dem Buch was ich habe. Kannst du mir dann ein Bsp. geben oder so ähnlich. 😃



  • kann mir jmd ein bsp. geben ich finde nur sachen wie ich ein transparentes bild anzeigen kann und das will ich nicht sondern nur ein einfache bmp und wenn ich drauf drücke soll es verschwinden. 😞 😞 😞 😞



  • Willst du nur ein Bitmap anzeigen? Dann schau mal auf www.germandevnet.de unter Knowledgebase ist ein WinAPI Tutorial, da ist auch ein Kapitel über Bitmaps.

    cu



  • Damit ich dich richtig verstehe du willst ein Bild auf einen hdc erstellen und wenn du da mit der maus draufklickst soll es verschwinden???

    also das mit den bild auf einen hdc malen is kein prob. nur das es verschwinden soll mhh weiss ich jetzt nich 🙂

    wenn das bild verschwinden soll wenn man draufklickt würde ich ein static nehmen und dort ein bild drauf malen 🙂 das is einfacher hehe

    mfg

    p.s. falls du den code haben willst um ein bild auf einen hdc zu erstellen sag bescheid 🙂



  • *bescheit* 🙂



  • LOL kk 🙂

    LRESULT CALLBACK MainProc(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParam)
    {
        HDC hdc, hdcMem;
        BITMAP bitmap;
        PAINTSTRUCT ps;
        static HBITMAP hbitmap;
        static cxClient, cyClient;
    
        switch(nMsg)
        {
    
        case WM_CREATE:
            hbitmap = (HBITMAP) LoadImage(NULL,"test.bmp",IMAGE_BITMAP,    NULL, NULL, LR_LOADFROMFILE | LR_DEFAULTSIZE);
    
            GetObject(hbitmap, sizeof(BITMAP), &bitmap);
            cxClient = bitmap.bmWidth;
            cyClient = bitmap.bmHeight;
    
            if(hbitmap == NULL)
                MessageBox(NULL, "Error", NULL,NULL);
        break;
    
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
    
            hdcMem = CreateCompatibleDC(hdc);
            SelectObject(hdcMem, hbitmap);
    
            BitBlt(hdc, 0,0, cxClient, cyClient,hdcMem,0,0, SRCCOPY);
    
            DeleteDC(hdcMem);
            EndPaint(hWnd, &ps);
    
            break;
    
        case WM_DESTROY:
            {
                PostQuitMessage(0);
                return 0;
            } break;
    
        }
    
        return DefWindowProc(hWnd,nMsg,wParam,lParam);
    }
    

    Damit du es nich zu einfach hast darfst du selber rausfinden was welcher befehl macht *gg* aber eigentlich sind die ziemlich logisch 🙂



  • Damit ich dich richtig verstehe: Soll das Bild _während_ du draufdrückst verschwinden, oder soll man das Bild mit Klicks "an" bzw. "aus"-schalten können?

    cu



  • nein das fenster soll verschwinden



  • Fenster verschwinden: ShowWindow(hWnd,SW_HIDE);
    Fenster schließen: PostQuitMessage(0);

    War mir jetzt nicht ganz sicher, was du meinst.

    cu



  • PostQuitMessage(0); <- Anwendung schließen!!!



  • DestroyWindow(hWnd);



  • PostMessage(hWnd, WM_CLOSE, 0, 0);



  • DestroyWindow is zu hart 🙂



  • nein wenn ich auf das bild klicke oder drücke dann soll das fenster in dem angezeigt wird verschwinden.



  • Dann so, denk' ich mal 🙄 :

    PostMessage(GetParent(hWnd), WM_CLOSE, 0, 0);
    


  • schließ doch einfach das fenster was du willst!! ist uns doch sche*ss egal!


Anmelden zum Antworten