Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » System Tray Icon, aber kein Menü

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.02.2006, 17:54 Uhr
~paru2006
Gast


Hallo,

ich habe mir für ein Java Programm mit Hilfe des Java Native Interfaces eine DLL programmiert, die ein System Tray Icon erzeugt und ein Popup Menü anzeigen soll. Das Java Programm initialisiert die DLL korrekt und das Icon wird angezeigt. Leider passiert beim klicken mit der Maus nichts, d.h. es wird kein Menü angezeigt.

Hier mal der Code dazu:


C++:
#include <jni.h>
#include <windows.h>
#include <process.h>
#include <stdio.h>

#define WM_SYSTRAY (WM_APP+100)

HINSTANCE          hInstance = NULL;
HWND               hWindow = NULL;
HMENU              hMenu;
HICON              hIcon;
DWORD              dThread;


BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD dwReason, LPVOID lReserved) {
  switch (dwReason) {
    case DLL_PROCESS_ATTACH:
      hInstance = (HINSTANCE)hInst;
      break;

    case DLL_THREAD_ATTACH:
      break;

    case DLL_THREAD_DETACH:
      break;

    case DLL_PROCESS_DETACH:
      break;
  }
  return TRUE;
}

LRESULT APIENTRY WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
  switch (uMsg) {
    case WM_DESTROY:
      PostQuitMessage(0);
      break;

    case WM_COMMAND:
      break;

    case WM_RBUTTONUP:
      if (LOWORD(lParam) == WM_RBUTTONUP) {
        POINT pt;
        GetCursorPos(&pt);
        TrackPopupMenu(hMenu, 0,pt.x, pt.y, 0, hWnd, NULL);
      }
      break;
  }
  return (DefWindowProc(hWnd, uMsg, wParam, lParam));
}

DWORD WINAPI ThreadProc(LPVOID) {
  MSG msg;
  while (GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
}

extern "C"
JNIEXPORT jboolean JNICALL Java_add (JNIEnv *jEnv, jobject oObj, jint iIcon, jstring sToolTip) {
  WNDCLASS wClass;
  wClass.style = CS_HREDRAW | CS_VREDRAW;
  wClass.lpszClassName = "SysTrayClass";
  wClass.lpfnWndProc = (WNDPROC)WndProc;
  wClass.hbrBackground = NULL;
  wClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  wClass.hCursor = LoadCursor(NULL, IDC_ARROW);
  wClass.lpszMenuName = NULL;
  wClass.cbClsExtra = 0;
  wClass.cbWndExtra = 0;
  wClass.hInstance = hInstance;

  if (!RegisterClass(&wClass)) return FALSE;
  hWindow = CreateWindow("SysTrayClass", "pSysTray", WS_POPUP, 0, 0, 0, 0, NULL, NULL, hInstance, NULL);
  hMenu = CreatePopupMenu();

  AppendMenu(hMenu, MF_STRING, 100, TEXT("Open"));
  AppendMenu(hMenu, MF_STRING, 101, TEXT("Save"));
  AppendMenu(hMenu, MF_SEPARATOR, 0, TEXT(""));
  AppendMenu(hMenu, MF_STRING, 102, TEXT("Exit"));

  NOTIFYICONDATA nIcon;
  nIcon.cbSize = sizeof(NOTIFYICONDATA);
  nIcon.uID = 0;
  nIcon.hWnd = hWindow;
  nIcon.hIcon = (HICON)iIcon;
  nIcon.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
  nIcon.uCallbackMessage = WM_SYSTRAY;

  char const *cToolTip;
  cToolTip = jEnv->GetStringUTFChars(sToolTip, 0);
  strcpy(nIcon.szTip, cToolTip);
  BOOL bResult = Shell_NotifyIcon(NIM_ADD, &nIcon);
  jEnv->ReleaseStringUTFChars(sToolTip, cToolTip);
  if (hIcon) DestroyIcon(hIcon);
  CreateThread(NULL, 0, ThreadProc, 0, 0, &dThread);
  return bResult;
}

extern "C"
JNIEXPORT jboolean JNICALL Java_remove (JNIEnv *jEnv, jobject oObj) {
  NOTIFYICONDATA nIcon;
  nIcon.cbSize = sizeof(NOTIFYICONDATA);
  nIcon.uID = 0;
  nIcon.hWnd = hWindow;
  BOOL bResult = Shell_NotifyIcon(NIM_DELETE, &nIcon);
  DestroyMenu(hMenu);
  DestroyWindow(hWindow);
  return bResult;
}



Wer kann mir hierbei helfen, ich denke mal dies wird ein Thread Problem sein.

Vielen Dank im Voraus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: