Avatar billede jb00797 Nybegynder
15. januar 2008 - 19:55 Der er 3 kommentarer og
1 løsning

Problemer med ikke at kunne lukke vinduet

Hej

Jeg har en c++ win32 application som har et trayicon hele tiden, jeg vil gerne gøre sådan at man ikke kan lukke vinduet med alt +f4 og ved at trykke i krydset, men kun lukke det ned ved at højreklikke på mit tray ikon og vælge luk i menuen. Har lavet menuen og det hele og det virker. Men hvordan kan jeg gøre sådan at man ikke kan trykke på al+f4 og krydset?

Når man trykker der skal programmet blot skjules.
Avatar billede bertelbrander Novice
16. januar 2008 - 19:55 #1
Var det en løsning at fjerne hele "caption" inklusive system-menuen (den øverst til venstre) og X'et?
Er det en standard Win32 Api applikation?
Avatar billede jb00797 Nybegynder
16. januar 2008 - 20:06 #2
Det er en standard Win32 Api applikation ja.
Ved ikke helt, for ville gerne have så folk kunne minimere programmet igen, og det ville jo ikke beskytte mod alt+f4?
Avatar billede bertelbrander Novice
16. januar 2008 - 22:49 #3
Hvis du returnerer 0 ved WM_CLOSE uden at kalde DefWindowProc burde det virke.
Du kan kalde DestroyWindow når vinduet skal lukkes.
Et eksempel:
#include <windows.h>

#define IDC_BUTTON1  1200

HINSTANCE InstanceHandle;

LRESULT CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
  switch(msg)
  {
  case WM_CREATE:
      CreateWindow("BUTTON",
                  "Close Me",            // Button Text
                  WS_CHILD | WS_VISIBLE,  // Style
                  5, 30, 100, 30, // position
                  hwndDlg, // Owner
                  (HMENU)(IDC_BUTTON1), // ID
                  InstanceHandle,  // The application
                  0);

      break;
  case WM_CLOSE:
      return 0;
  case WM_COMMAND:
      if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_BUTTON1)
      {
        DestroyWindow(hwndDlg);
      }
      break;
  }
  return DefWindowProc(hwndDlg, msg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, INT)
{
  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, 100,  // 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 jb00797 Nybegynder
22. februar 2010 - 15:07 #4
svar
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