Button Bitmap

kerian

Erfahrenes Mitglied
Ich erzeuge mir mit den Code einige Buttons im Dialog!
Nun möche ich die Buttons mit Bitmaps hinterlegen!
Ich habe schon einiges versucht aber es geht irgend wie nicht!
Kann mir jemand sagen wie ich den Code gestallten mus damit das
ding funktioniert. Sitze schon seit drei Tagen dran Hilfe Hilfe !
Wie mann Bitmaps in ein Dialog einbindet weis ich schon aber in diesem Spezielem Fall :(

Code:
BOOL CGR2Hue::OnInitDialog() 
{
  CDialog::OnInitDialog();
  g_uBtnClickMsg = RegisterWindowMessage(BTN_MSG_STRING);
  CString csTemp;
  CRect rBtn;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// hier werden die Buttons erzeugt, aber die Bitmaps wollen nicht! 
  
	// say we need 10 buttons...
  for (int i = 0; i<2; i++) {
    CGR2Button* pBtn = new CGR2Button();

    m_arrayBtns.Add(pBtn);    // CTypedPtrArray storing all buttons dynamically           created
    GetButtonRect(i, rBtn);   // will populate rBtn given button number
    csTemp.Format("Button%d", i+1);
    pBtn->Create(csTemp, WS_CHILD|WS_VISIBLE|WS_TABSTOP,  rBtn, this, 9001+i);  // give a unique ID (not strictly necessary)
    pBtn->m_index = i;
    pBtn->m_uBtnClickMsg = g_uBtnClickMsg;
    	}	
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
    // size the dialog box to the number of buttons
  int width;
  if(i==1)
  { width = (i*110) + 100;}
  else
  { width = ((i/2)*110) + 100;}
  
 int height = 100;   // on my form the buttons are in rows of two
  SetWindowPos(NULL,   // pWndAfter (z-order)
              0,      // x pos
               0,      // y pos
               width,
               height,
               SWP_NOZORDER|SWP_NOMOVE);
  // TODO: Zusätzliche Initialisierung hier einfügen

      // Set Initial Scroll Positions
    m_nHscrollPos = 0;
    m_nVscrollPos = 0;

    // Get the initial dimensions of the dialog
    GetClientRect(&m_ClientRect);
    m_bInitialized = TRUE;

    // Create a resize gripper
    CRect initRect;
    GetClientRect(initRect);
    initRect.left = initRect.right - GetSystemMetrics(SM_CXHSCROLL);
    initRect.top  = initRect.bottom - GetSystemMetrics(SM_CYVSCROLL);

    DWORD dwStyle = WS_CHILD | 
                    SBS_SIZEBOX | 
                    SBS_SIZEBOXBOTTOMRIGHTALIGN | 
                    SBS_SIZEGRIP | 
                    WS_VISIBLE;

    //m_Grip.Create(dwStyle,initRect, this, AFX_IDW_SIZE_BOX);

    // Modify our window style to ensure that we have a resizeable dialog
    ModifyStyle(WS_BORDER | DS_MODALFRAME,
                WS_THICKFRAME | WS_OVERLAPPEDWINDOW,
                SWP_FRAMECHANGED);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben
}
 
Zuletzt bearbeitet von einem Moderator:
nutzt du die MFC

Probier einfach mal folgendes :
PHP:
void CTestDlg::OnSetBitmap()  
{ 
    //Instance-Handle besorgen 
    HINSTANCE hInstance = AfxGetInstanceHandle(); 
    //Bitmap-Handle besorgen und Bitmap laden 
    HBITMAP hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1)); 
    //Bitmap auf Button bringen 
    m_cBitmapButton.SetBitmap(hBitmap); 
}

IDB_BITMAP1 ist der Name deines Bitmaps
m_cBitmapButton ist die Variable deines Buttons

(Ich hab einfach mal den PHP Code Tag genommen, damit ews schön formatiert ist)
 
Hallo,
ich habe noch einige Fragen an Dich. Bekomme ich mit AfxGetInstanceHandle()
den Handel des aktuellen Fensters?
Ja das Sieht gut aus werde es das nächtsmal ausprobieren.
Mein lösung sieht so aus:
for (int i = 0; i<g_pGR2Array->m_geraeteArray->GetSize(); i++) {
CGR2Button* pBtn = new CGR2Button();

m_arrayBtns.Add(pBtn); // CTypedPtrArray storing all buttons dynamically created
GetButtonRect(i, rBtn); // will populate rBtn given button number
// csTemp.Format("Button%d", i+1);
pBtn->Create(NULL, WS_CHILD|WS_TABSTOP|WS_VISIBLE|BS_BITMAP|BS_FLAT, rBtn, this, 9001+i); // give a unique ID (not strictly necessary)
pBtn->m_index = i;
pBtn->m_uBtnClickMsg = g_uBtnClickMsg;
// pBtn->SetIcon( m_Icon );
// pBtn->SetWindowText("TEST");
// pBtn->ModifyStyle( BS_DEFPUSHBUTTON );
m_bild.LoadBitmap(IDB_BITMAP_GR0L);
pBtn->SetBitmap(m_bild);
// pBtn->UpdateWindow();
m_bild.Detach();
}

Im Create BS_BITMAP setzen und dann einfach mit pBtn->SetBitmap(m_bild);
das Bild laden. Aber es hat gedauert bid ich das rausgefunden habe. :-)

Ich wuste auch nicht wie ich ein Bitmap in HBITMAP umwandeln kann!
Wie ich sehe geht das mit MAKEINTRESOURCE oder?
 
ja, wies im kommentar steht, holst du dir so den handle der aktuellen instance (deines programmes)

aber schaut ja gut aus :)
 
Zurück