tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
371
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von sunflower84
    sunflower84 sunflower84 ist offline Mitglied Brokat
    Registriert seit
    Apr 2005
    Ort
    Hettenleidelheim(Pfalz)
    Beiträge
    283
    Hallo

    Ich benutze VS 2005 und programmiere C++(MFC). Da das Programm auch ohne Framework laufen soll. Ich habe ein Image erstellt. Jetzt würde ich gerne ein Click Ereignis auf dieses Image haben. Wenn man auf das Image clickt soll eine exe gestartet werden. Geht das?
    Kenn mich nicht so gut aus mit MFC. Bin Windows Forms gewöhnt.

    Liebe Grüße
    Sunflower84
     

  2. #2
    Avatar von sunflower84
    sunflower84 sunflower84 ist offline Mitglied Brokat
    Registriert seit
    Apr 2005
    Ort
    Hettenleidelheim(Pfalz)
    Beiträge
    283
    Hier mein Code:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    char szClassName[ ] = "test";
     
    int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,
                        LPSTR lpszArgument,int nFunsterStil)
    {
        HWND hwnd;              
        MSG messages;         
        WNDCLASSEX wincl; 
        
        wincl.hInstance = hThisInstance;
        wincl.lpszClassName = szClassName;
        wincl.lpfnWndProc = WindowProcedure;      
        wincl.style = CS_DBLCLKS;                 
        wincl.cbSize = sizeof (WNDCLASSEX);
        wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
        wincl.lpszMenuName = NULL;                
        wincl.cbClsExtra = 0;                      
        wincl.cbWndExtra = 0;      
        wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
        
        if (!RegisterClassEx (&wincl))
            return 0;
     
        hwnd = CreateWindowEx (0, szClassName, szClassName,
               WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,
               CW_USEDEFAULT,544,350,HWND_DESKTOP,
               NULL,hThisInstance,NULL);
      
        ShowWindow (hwnd, nFunsterStil);
       
        while (GetMessage (&messages, NULL, 0, 0))
        { 
            TranslateMessage(&messages);
            DispatchMessage(&messages);
        }   
        return messages.wParam;
    }
     
    LRESULT CALLBACK WindowProcedure 
    (HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
    { 
    HDC                       hdc, hdcMem;
    static HBITMAP      hBitMap;
    static HBITMAP      hBitMap2;
    static BITMAP       bitmap ;
    static BITMAP       bitmap2 ;
     
    PAINTSTRUCT        ps ;
     
        switch (message)                 
        {   
            case WM_CREATE:
              hBitMap = (HBITMAP)LoadImage(0,"test.bmp",IMAGE_BITMAP, 0, 0,
                     LR_DEFAULTSIZE|LR_LOADFROMFILE|LR_CREATEDIBSECTION);
              hBitMap2 = (HBITMAP)LoadImage(0,"test.bmp",IMAGE_BITMAP, 0, 0,
                    LR_DEFAULTSIZE|LR_LOADFROMFILE|LR_CREATEDIBSECTION);
         
              if(hBitMap==NULL)
              {
                MessageBox(hwnd,"Bild konnte nicht geladen werden","Error",0);
              return -1;
              }
              if(hBitMap2==NULL)
              {
                MessageBox(hwnd,"Bild2 konnte nicht geladen werden","Error",0);
              return -1;
              }
              GetObject (hBitMap, sizeof (BITMAP), &bitmap) ;
              GetObject (hBitMap2, sizeof (BITMAP), &bitmap2) ;          
              return 0;
              
           case WM_PAINT:
             hdc = BeginPaint (hwnd, &ps) ;
             hdcMem = CreateCompatibleDC (hdc) ;
             SelectObject (hdcMem, hBitMap) ;
             BitBlt (hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight, 
                                        hdcMem, 0, 0, SRCCOPY) ;
             SelectObject (hdcMem, hBitMap2) ;
             BitBlt (hdc, 324, 237, bitmap2.bmWidth, bitmap2.bmHeight, 
                                        hdcMem, 0, 0, SRCCOPY) ;
             DeleteDC (hdcMem) ;
             EndPaint (hwnd, &ps) ;        
             return 0 ;
     
           case WM_DESTROY:
             DeleteObject (hBitMap) ;
             DeleteObject (hBitMap2) ; 
             PostQuitMessage (0);      
             break;
           default:                     
             return DefWindowProc (hwnd, message, wParam, lParam);
        }
     
        return 0;
    }
     

  3. #3
    Trouble Shooter Tutorials.de Gastzugang
    Hi,

    bei mir hat folgende Variante funktioniert (MFC-Anwendungsassistent->Dialogfeldbasierend):

    1. Image-Objekt aus der Toolbox aufs Dialogfeld ziehen
    2. Rechtsklick auf das Image-Objekt->Eigenschaften
    3. Tab "Allgemein" ID= IDC_Bitmap, Typ= Bitmap
    4. Tab "Formate" ein Häkchen bei Benachrichtigungen (=notify)
    5. Eigenschaften schließen

    6. Rechtsklick auf Image-Objekt->Klassen-Assistent
    7. IDC_Bitmap markieren und eine Funktion für BN_CLICKED hinzufügen
    8. auf Code bearbeiten klicken und folgende Codezeile eingeben (Verzeichnispfad muss näturlich angepasst werden):
    Code :
    1
    
    WinExec("C:\\windows\\system32\\mspaint.exe", SW_SHOW);

    Hoffe es hilft.

    MfG
    Trouble Shooter
    Geändert von Trouble Shooter (06.06.08 um 21:22 Uhr)
     

  4. #4
    Avatar von jokey2
    jokey2 jokey2 ist offline Mitglied Smaragd
    Registriert seit
    Nov 2004
    Beiträge
    1.235
    Wenn Du kein Image-Control für die Bilder verwenden willst (oder ohne Ressourceneditor arbeitest), kannst Du auch die WM_LBUTTONDOWN (oder WM_LBUTTONUP oder WM_LBUTTONDBLCLK) Nachrichten des Hauptfensters (in das Du die Bilder zeichnest, wenn ich das richtig gesehen habe) verarbeiten. Dann mußt Du nur naoch mit GetMessagePos() die Mauskoordinaten zu Zeitpunkt des Klicks ermitteln und sehen in welchem Bild dieser Punkt liegt (z.B. mit PtInRect()). Dann kannst Du damit weitermachen.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    DWORD dwMessagePos;
    POINT ptMessagePoint;
    RECT rectBitmap1;
    RECT rectBitmap2;
     
    ...
    case WM_LBUTTONDOWN:
        dwMessagePos = GetMessagePos();
        ptMessagePoint.x = GET_X_LPARAM(dwMessagePos);
        ptMessagePoint.y = GET_Y_LPARAM(dwMessagePos);
     
        if(PtInRect(rectBitmap1, ptMessagePoint))
        {
            //hier Code für Bild 1
        }
        else if(PtInRect(rectBitmap2, ptMessagePoint))
        {
            //hier Code für Bild 2
        }
        else
        {
            //hier Code für die anderen Linksklicks
        }
        break;
    Die RECT-Variablen mußt Du natürlich mit den korrekten Werten füllen.
     

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 30.12.10, 14:06
  2. Antworten: 2
    Letzter Beitrag: 06.07.08, 01:12
  3. image fade und image als link verwenden
    Von phamez im Forum Javascript & Ajax
    Antworten: 5
    Letzter Beitrag: 08.04.07, 12:34
  4. Fragen zu Drawing.Image und WebControls.Image
    Von rainerdam im Forum .NET Archiv
    Antworten: 13
    Letzter Beitrag: 28.10.04, 09:45
  5. Antworten: 1
    Letzter Beitrag: 02.05.04, 11:59