Problem z NotifyDataInfo

Uporałem się z ostatnim błędem . ale teraz mam nowy,

Zrobiłem sobie procedure ladującą okienko i tray + ballontip.

ale nie wiem dlaczego mogę wyświetlić ballon oraz tray tylko w ciele procedury. Zrobiłem zmienną globalną do przechowywania uchwytu, ale nic to nie daje, balloon sie nie wyświetla. Czy ktoś może mi powiedzieć co źle zrobiłem ?

#define	WM_USER_SHELLICON WM_USER + 1 


HWND hWindow;



LRESULT CALLBACK WndProcLog(HWND hwndDlg,

                            UINT msg,

                            WPARAM wParam,

                            LPARAM lParam)

{



   switch(msg)

   {



   case WM_CREATE:

     // Minimize(hWindow);

	 SetBaloonTip(hWindow,"Monika","Co Ty tu robisz?"); // tutaj się nie pokazuje i nie wiem dlaczego

      break;





   }

   return DefWindowProc(hwndDlg, msg, wParam, lParam);

} 

void Test2()

{



}


int WINAPI MyWindow()

{

 WNDCLASS wcl;

wcl.hInstance = NULL;

wcl.lpszClassName =	"iHAckKal";

wcl.lpfnWndProc =	WndProcLog;

wcl.lpszMenuName =	NULL;

wcl.hInstance = InstanceHandle; 

wcl.style = 0;////

wcl.hIcon = LoadIcon(InstanceHandle, MAKEINTRESOURCE(IDI_ICON1));

wcl.hCursor = LoadCursor(NULL, IDC_ARROW);

wcl.hbrBackground =	(HBRUSH) GetStockObject (BLACK_BRUSH);

wcl.cbClsExtra =	0;

wcl.cbWndExtra =	0;



//PARAMETRY OKNA - KONIEC

    if(!RegisterClass(&wcl))

    {

            MessageBox(NULL , "Failed to register window class" ,

                        "Error" , MB_ICONEXCLAMATION | MB_OK );

             return 0;

    }


hWindow = CreateWindow (

"iHAckKal", //nazwa klasy okna

"iHAckKal ", //tytuł okna

WS_CAPTION, //styl

540, 400, //współrzędne

300, 300, //wymiary okienka

NULL, //brak okna nadrzędnego

NULL, //brak menu

InstanceHandle, //uchwyt instancji

NULL //brak dodatkowych danych

);

if(hWindow == NULL)

     {

           MessageBox(NULL , "Failed to create window"

                        , "Error"

                        , MB_ICONEXCLAMATION | MB_OK );

           return 0;

     }




	Minimize(hWindow); // tutaj wszystkie funkcje działają 




	SetBaloonTip(hWindow,"Siemka","Siemka"); //tutaj wszystkie funkcje działają 

	SetBaloonTip(hWindow,"iHackKal","Siemka"); //tutaj wszystkie funkcje działają 

MSG message;

while(GetMessage(&message, NULL, 0, 0))

{

TranslateMessage(&message);

DispatchMessage(&message);

}

 return message.wParam;


 }




void Minimize(HWND hwndDlg)

{

  /* NOTIFYICONDATA NotifyIconData;

   //ShowWindow(hwndDlg, SW_HIDE);

   LPSTR sTip = "iHack Kal";

   NotifyIconData.cbSize = sizeof(NotifyIconData);

   NotifyIconData.uID = 123;

   NotifyIconData.hWnd = hwndDlg;

   NotifyIconData.hIcon = LoadIcon(InstanceHandle, MAKEINTRESOURCE(IDI_ICON1));

   NotifyIconData.uFlags = NIF_ICON | NIF_MESSAGE;

   NotifyIconData.uCallbackMessage = WM_USER_SHELLICON;

   lstrcpy(NotifyIconData.szTip, sTip);

   NotifyIconData.uVersion = NOTIFYICON_VERSION;

	Shell_NotifyIcon(NIM_SETVERSION, &NotifyIconData);

   if(!Shell_NotifyIcon(NIM_ADD, &NotifyIconData)) 

MessageBox(NULL, "No niestety, z ikonki nici...", "iHAckKal", MB_ICONEXCLAMATION);

   */


LPSTR sTip = "iHack Kal";

NOTIFYICONDATA nid;

nid.cbSize = sizeof(NOTIFYICONDATA);

nid.hWnd = hwndDlg;

nid.uID = ID_TRAY1;

nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;

nid.uCallbackMessage = WM_USER_SHELLICON;

nid.hIcon = LoadIcon(InstanceHandle, MAKEINTRESOURCE(IDI_ICON1));

lstrcpy(nid.szTip, sTip);

nid.uVersion = NOTIFYICON_VERSION;

Shell_NotifyIcon(NIM_SETVERSION, &nid);


if(!Shell_NotifyIcon(NIM_ADD, &nid)) 

MessageBox(NULL, "No niestety, z ikonki nici...", "iHAckKal", MB_ICONEXCLAMATION);


}


void UnMinimize(HWND hwndDlg)

{

	LPSTR sTip = "iHack Kal";

   NOTIFYICONDATA NotifyIconData;

   ShowWindow(hwndDlg, SW_SHOW);

   memset(&NotifyIconData, 0, sizeof(NotifyIconData));

   NotifyIconData.cbSize = sizeof(NotifyIconData);

   NotifyIconData.uID = 123;

   NotifyIconData.hWnd = hwndDlg;

   NotifyIconData.hIcon = LoadIcon(InstanceHandle, MAKEINTRESOURCE(IDI_ICON1));

   NotifyIconData.uFlags = NIF_ICON | NIF_MESSAGE;

   NotifyIconData.uCallbackMessage = WM_USER_SHELLICON;

   lstrcpy(NotifyIconData.szTip, sTip);

   Shell_NotifyIcon(NIM_DELETE, &NotifyIconData);


}


void SetBaloonTip(HWND hwndDlg,char* Title,char* Info) 

{ 

	LPSTR sTip = "iHack Kal";


  NOTIFYICONDATA NotifyIconData; 

   memset(&NotifyIconData, 0, sizeof(NOTIFYICONDATA)); 

   NotifyIconData.cbSize = sizeof(NOTIFYICONDATA); 

   NotifyIconData.uID = ID_TRAY1; 

   NotifyIconData.hWnd = hwndDlg; 

   NotifyIconData.hIcon = LoadIcon(InstanceHandle, MAKEINTRESOURCE(IDI_ICON1)); 

   NotifyIconData.uFlags = 0x10; 

   NotifyIconData.uTimeout = 15000; 

   NotifyIconData.dwInfoFlags = NIIF_INFO; 

   NotifyIconData.uCallbackMessage = WM_USER_SHELLICON;

   strcpy(NotifyIconData.szInfoTitle, Title); 

   strcpy(NotifyIconData.szInfo, Info); 

   lstrcpy(NotifyIconData.szTip, sTip);


   NotifyIconData.uVersion = NOTIFYICON_VERSION;

   Shell_NotifyIcon(NIM_SETVERSION, &NotifyIconData);

   Shell_NotifyIcon(NIM_MODIFY, (NOTIFYICONDATA *)&NotifyIconData);

Nie wiem dlaczego tak się dzieje. Potrzebuje używać tych funkcji w innych częściach kodu, ale one działają tylko w ciele procedury MyWindow(); i nie wiem dlaczego.

proszę o pomoc.

Pozdrawiam

Tam nie działa ponieważ okno jeszcze nie jest stworzone. Wyślij tam komunikat przez PostMessage do aplikacji lub nastaw timer, w odpowiedzi na ten komunikat lub callback timera wyświetlaj balona.

Okno jest stworzone, i teraz działa. ale dlaczego np jak chce zrobić sobie nową procedurę np

void test()

{

 SetBaloonTip(hWindow,"Kamil","Co Ty tu robisz?");


}

nie wyświetla ballonu ?

LRESULT CALLBACK WndProcLog(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)

{


   switch(msg)

   {



   case WM_CREATE:

     // Minimize(hWindow);

	Minimize(hwndDlg);

    SetBaloonTip(hwndDlg,"Monika","Co Ty tu robisz?");

	 //UpdateWindow(hwndDlg);

      break;





   }

   return DefWindowProc(hwndDlg, msg, wParam, lParam);

} 

void Test2()

{




}


int MyWindow()

{

 WNDCLASS wcl;

wcl.hInstance = NULL;

wcl.lpszClassName =	"iHAckKal";

wcl.lpfnWndProc =	WndProcLog;

wcl.lpszMenuName =	NULL;

wcl.hInstance = InstanceHandle; 

wcl.style = 0;////

wcl.hIcon = LoadIcon(InstanceHandle, MAKEINTRESOURCE(IDI_ICON1));

wcl.hCursor = LoadCursor(NULL, IDC_ARROW);

wcl.hbrBackground =	(HBRUSH) GetStockObject (BLACK_BRUSH);

wcl.cbClsExtra =	0;

wcl.cbWndExtra =	0;



//PARAMETRY OKNA - KONIEC

    if(!RegisterClass(&wcl))

    {

            MessageBox(NULL , "Failed to register window class" ,

                        "Error" , MB_ICONEXCLAMATION | MB_OK );

             return 0;

    }


hWindow = CreateWindow (

"iHAckKal", //nazwa klasy okna

"iHAckKal ", //tytuł okna

WS_CAPTION, //styl

540, 400, //współrzędne

300, 300, //wymiary okienka

NULL, //brak okna nadrzędnego

NULL, //brak menu

InstanceHandle, //uchwyt instancji

NULL //brak dodatkowych danych

);

if(hWindow == NULL)

     {

           MessageBox(NULL , "Failed to create window"

                        , "Error"

                        , MB_ICONEXCLAMATION | MB_OK );

           return 0;

     }




UpdateWindow(hWindow);

 SetParent(hWindow,HWND_MESSAGE);

	//Minimize(hWindow);

Sleep(10000);

	 SetBaloonTip(hWindow,"Kamil","Co Ty tu robisz?");




	//SetBaloonTip(hWindow,"Siemka","Siemka");

	//SetBaloonTip(hWindow,"iHackKal","Siemka");


MSG message;

while(GetMessage(&message, NULL, 0, 0))

{

TranslateMessage(&message);

DispatchMessage(&message);

}

 return message.wParam;


 }

Może dlatego że nigdzie/nigdy tej procedury nie wywołujesz?

wywołuję. pokaże cały kod. jest trochę zagmatwany.

LRESULT CALLBACK WndProcLog(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)

{


   switch(msg)

   {



   case WM_CREATE:

     // Minimize(hWindow);

	Minimize(hwndDlg);

    SetBaloonTip(hwndDlg,"Monika","Co Ty tu robisz?");

	 //UpdateWindow(hwndDlg);

      break;


  case WM_DESTROY:

	  UnMinimize(hwndDlg);

            PostQuitMessage(0);

        break;






   }

   return DefWindowProc(hwndDlg, msg, wParam, lParam);

} 

void Test2()

{




}


int MyWindow()

{

 WNDCLASS wcl;

wcl.hInstance = NULL;

wcl.lpszClassName =	"Program";

wcl.lpfnWndProc =	WndProcLog;

wcl.lpszMenuName =	NULL;

wcl.hInstance = InstanceHandle; 

wcl.style = 0;////

wcl.hIcon = LoadIcon(InstanceHandle, MAKEINTRESOURCE(IDI_ICON1));

wcl.hCursor = LoadCursor(NULL, IDC_ARROW);

wcl.hbrBackground =	(HBRUSH) GetStockObject (BLACK_BRUSH);

wcl.cbClsExtra =	0;

wcl.cbWndExtra =	0;



//PARAMETRY OKNA - KONIEC

    if(!RegisterClass(&wcl))

    {

            MessageBox(NULL , "Failed to register window class" ,

                        "Error" , MB_ICONEXCLAMATION | MB_OK );

             return 0;

    }


hWindow = CreateWindow (

"Program", //nazwa klasy okna

"Program ", //tytuł okna

WS_CAPTION, //styl

540, 400, //współrzędne

300, 300, //wymiary okienka

NULL, //brak okna nadrzędnego

NULL, //brak menu

InstanceHandle, //uchwyt instancji

NULL //brak dodatkowych danych

);

if(hWindow == NULL)

     {

           MessageBox(NULL , "Failed to create window"

                        , "Error"

                        , MB_ICONEXCLAMATION | MB_OK );

           return 0;

     }




//UpdateWindow(hWindow);

 SetParent(hWindow,HWND_MESSAGE);

	//Minimize(hWindow);

	Sleep(5000);

	 SetBaloonTip(hWindow,"Kamil","Co Ty tu robisz?");




	//SetBaloonTip(hWindow,"Siemka","Siemka");

	//SetBaloonTip(hWindow,"Program","Siemka");


MSG message;

while(GetMessage(&message, NULL, 0, 0))

{

TranslateMessage(&message);

DispatchMessage(&message);

}

 return message.wParam;


 }




void test(void* ppparm)

{


	//HWND uchwyt = FindWindow(NULL,"KalOnline") ;


	//printf("HWND: %d\n", uchwyt);


	//Minimize(uchwyt);

	//SetBaloonTip(uchwyt,"Siemka","Siemka");

	//Sleep(2000);



	MyWindow();

	Sleep(5000);

 SetBaloonTip(hWindow,"Kamil","Co Ty tu robisz?");



}



void Minimize(HWND hwndDlg)

{


LPSTR sTip = "Program";

NOTIFYICONDATA nid;

nid.cbSize = sizeof(NOTIFYICONDATA);

nid.hWnd = hwndDlg;

nid.uID = ID_TRAY1;

nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;

nid.uCallbackMessage = WM_USER_SHELLICON;

nid.hIcon = LoadIcon(InstanceHandle, MAKEINTRESOURCE(IDI_ICON1));

lstrcpy(nid.szTip, sTip);

nid.uVersion = NOTIFYICON_VERSION;

Shell_NotifyIcon(NIM_SETVERSION, &nid);

UpdateWindow(hwndDlg);

if(!Shell_NotifyIcon(NIM_ADD, &nid)) 

MessageBox(NULL, "No niestety, z ikonki nici...", "Program", MB_ICONEXCLAMATION);


}


void UnMinimize(HWND hwndDlg)

{

	LPSTR sTip = "Program";

   NOTIFYICONDATA NotifyIconData;

   ShowWindow(hwndDlg, SW_SHOW);

   memset(&NotifyIconData, 0, sizeof(NotifyIconData));

   NotifyIconData.cbSize = sizeof(NotifyIconData);

   NotifyIconData.uID = 123;

   NotifyIconData.hWnd = hwndDlg;

   NotifyIconData.hIcon = LoadIcon(InstanceHandle, MAKEINTRESOURCE(IDI_ICON1));

   NotifyIconData.uFlags = 0;

   NotifyIconData.uCallbackMessage = WM_USER_SHELLICON;

   lstrcpy(NotifyIconData.szTip, sTip);

   Shell_NotifyIcon(NIM_DELETE, &NotifyIconData);

PostQuitMessage(0);





}


void SetBaloonTip(HWND hwndDlg,char* Title,char* Info) 

{ 

	LPSTR sTip = "Program";


  NOTIFYICONDATA NotifyIconData; 

   memset(&NotifyIconData, 0, sizeof(NOTIFYICONDATA)); 

   NotifyIconData.cbSize = sizeof(NOTIFYICONDATA); 

   NotifyIconData.uID = ID_TRAY1; 

   NotifyIconData.hWnd = hwndDlg; 

   NotifyIconData.hIcon = LoadIcon(InstanceHandle, MAKEINTRESOURCE(IDI_ICON1)); 

   NotifyIconData.uFlags = 0x10; 

   NotifyIconData.uTimeout = 15000; 

   NotifyIconData.dwInfoFlags = NIIF_INFO; 

   NotifyIconData.uCallbackMessage = WM_USER_SHELLICON;

   strcpy(NotifyIconData.szInfoTitle, Title); 

   strcpy(NotifyIconData.szInfo, Info); 

   lstrcpy(NotifyIconData.szTip, sTip);

   UpdateWindow(hwndDlg);

   NotifyIconData.uVersion = NOTIFYICON_VERSION;

   Shell_NotifyIcon(NIM_SETVERSION, &NotifyIconData);

   Shell_NotifyIcon(NIM_MODIFY, (NOTIFYICONDATA *)&NotifyIconData); 



}

void test(void* ppparm) ładuje wszystko.

W którym wierszu wywołujesz? Wyszukiwanie słowa “test” w podanym przez ciebie kodzie wykazało jedynie pustą funkcję test2 oraz definicje funkcji test. Nie ma wywołania.

void test(void* ppparm)

{




   MyWindow();// ładuje okn i klasę

   Sleep(5000);

SetBaloonTip(hWindow,"Kamil","Co Ty tu robisz?"); // tutaj chce wywołać ten balonik



}



BOOL WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID)

	{

		if (reason == DLL_PROCESS_ATTACH)

		{


		InstanceHandle=hInst; // Handle

		_beginthread(test,0,NULL);

test zostaje wywołany, a dymku nie widać ;| widać tylko te dymki wywołane w MyWindow(); i w WndProcLog