Avatar billede ares Nybegynder
06. december 2006 - 10:59 Der er 8 kommentarer og
1 løsning

Billede i message box

Mangler et hint til hvordan jeg får indsat et billed i en messagebox.


{
  if(++ControlCounter == 2 )
    Messagebox med et billede

}

På forhånd tak.
ares
Avatar billede mcgoat Nybegynder
06. december 2006 - 11:01 #1
du bliver nok nødt til at lave din egen messagebox så :)

Bare lav en form med et billede og 2 knapper. Ok og Cancel f.eks.. vis den.. og alt afhængig af hvad man trykker så sker der noget
Avatar billede ares Nybegynder
06. december 2006 - 12:04 #2
Ok... måske var jeg ikke tydelig nok i min beskrivelse.

Der skal ikke være nogle knapper, men bare en box med et billed. Når man så trykker en bestem taste funktion skal den lukke.

Håber det hjælp.
Avatar billede bertelbrander Novice
06. december 2006 - 20:38 #3
Man kunne starte med nedenstående.
Det viser et billede med navnet sample.bmp og lukker med F4

#include <windows.h>

#define IDC_STATIC_1 1201

HINSTANCE InstanceHandle;

LRESULT CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
  switch(msg)
  {
  case WM_CREATE:
      {
        CreateWindow("STATIC",
                      "0", // Initial Text
                      WS_CHILD | WS_VISIBLE | SS_BITMAP,  // Style
                      5, 5, 100, 100, // position
                      hwndDlg, // Owner
                      (HMENU)(IDC_STATIC_1), // ID
                      InstanceHandle,  // The application
                      0);
        HBITMAP Bitmap = (HBITMAP )LoadImage(0, "sample.bmp", IMAGE_BITMAP, 100, 100, LR_LOADFROMFILE);
        if(!Bitmap)
            MessageBox(hwndDlg, "No Image", "---", 0);
        SendDlgItemMessage(hwndDlg, IDC_STATIC_1, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM )Bitmap);
      }
      break;
  case WM_KEYDOWN:
      if(wParam == VK_F4)
      {
        PostQuitMessage(0);
      }
      break;
  }
  return DefWindowProc(hwndDlg, msg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, INT nCmdShow)
{
  InstanceHandle = hInstance;

  WNDCLASS wc;
  memset(&wc, 0, sizeof(WNDCLASS));
  wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
  wc.lpfnWndProc = DialogProc;
  wc.hInstance = InstanceHandle;
  wc.hbrBackground = (HBRUSH )(COLOR_BTNFACE + 1);
  wc.lpszClassName = "WhateverClass";
  wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  if(!RegisterClass(&wc))
      return FALSE;

  HWND WindowHandle = CreateWindow("WhateverClass",
                                    "Whatever", // Caption text
                                    WS_MINIMIZEBOX | WS_VISIBLE | WS_CLIPSIBLINGS |
                                    WS_CLIPCHILDREN | WS_MAXIMIZEBOX | WS_CAPTION | WS_BORDER | WS_SYSMENU,
                                    100, 100, 150, 150,  // Position
                                    NULL,
                                    NULL,
                                    InstanceHandle,
                                    0);
  MSG Msg;
  while(GetMessage(&Msg, WindowHandle, 0, 0xFFFF) > 0)
  {
      if(!IsDialogMessage(WindowHandle, &Msg))
      {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
      }
  }
  return 0;
}
Avatar billede ares Nybegynder
07. december 2006 - 17:34 #4
>> Bertel det lader til at det er dig der skal rede min røv hver gang ;)

Kan du også fortælle hvordan man gør hvis det skal ind i en if løkke ala denne

if(GetAsyncKeyState(VK_CONTROL))
        {
            if(++ControlCounter == 4)

                Popup med grafik her.
        }
            else
        {
              ControlCounter = 0;
        }
  break;

På forhånd tak.
Avatar billede bertelbrander Novice
07. december 2006 - 20:04 #5
Det kommer an på om det andet er et windwos program med en message-loop, dvs kalder GetMessage i en løkke.

Og om det andet program skal fortsætte med at fungere eller boxen med billedet skal over tage kontrollen.

Jeg vil helst ikke vide hvad "rede min røv" betyder (jeg tror der mangler et d) ;-)
Avatar billede ares Nybegynder
07. december 2006 - 21:19 #6
>> bertel... aarrhhh come on bertel... find nu kammen frem og stryg den over mine røvhår... NOT!!!!  hehe ;)

Stavefejl jeg beklager de grimme billeder det måtte have udviklet på din nethinde...

Men seriøst...

Jeg tror det fucker op for mig fordi jeg gerne vil have en messagebox til at have en grafik baggrund.

Jeg har prøvet med endnu et vindue, men et child vindue kan ikke poppe op udenfor dets parent - er det ikke rigtig forstået ?

Det jeg har prøvet på er at lave et "program" der ligger i systemtray - trykkes CTRL eller ALT eller Shift så popper der en grafik op.

Ares..
Avatar billede bertelbrander Novice
07. december 2006 - 23:32 #7
Du vil have programmet fra:
http://www.eksperten.dk/spm/747782
Som du har udvidet til at ligge i tray, til at poppe op med et vindue, der ikke er andet end et billede, når den rigtige tast har været hold nede længe nok?

I så fald, kan du tage hele koden jeg postede før, undtagen message loopen, og putte over i det andet program.
Du kan omdøbe WinMain, slette:
MSG Msg;
while(GetMessage(&Msg, WindowHandle, 0, 0xFFFF) > 0)
{
...
Og kalde den fra

if(GetAsyncKeyState(VK_CONTROL))
{
  if(++ControlCounter == 4)
    Popup med grafik her.
}

Den message loop du har i det andet program skal du så ændre til:
while(GetMessage(&Msg, 0, 0, 0xFFFF) > 0)
Dvs 0 i stedet for WindowHandle
For at få den til at håndtere beskeder for alle vinduer i din app.
Avatar billede ares Nybegynder
05. juli 2007 - 21:50 #8
smid et svar en eller anden så vi kan få lukket spørgsmålet...

Ares
Avatar billede ares Nybegynder
28. november 2007 - 12:54 #9
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester