Saturday, March 04, 2006

Abraca-Da-Minimo

//
// MINIMIZE TO TRAY
//

NOTIFYICONDATA nid;
bool isTrayIcon=false;

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch (msg) {
case 10101:
if (lParam == WM_LBUTTONDBLCLK) {
OpenIcon(hwnd);

// SendMessage(hwnd, WM_SIZE, SIZE_RESTORED, NULL);
// SendMessage(hwnd, WM_SIZE, SIZE_RESTORED, MAKELPARAM(320, 200));
// SetForegroundWindow(hwnd);
// SetActiveWindow(hwnd);
// ShowWindow(hwnd, SW_SHOW);
// UpdateWindow(hwnd);
// SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOREPOSITION | SWP_SHOWWINDOW);
}
break;
case WM_SIZE:

if (wParam == SIZE_MINIMIZED) {
//Set tray icon here

nid.cbSize=sizeof(NOTIFYICONDATA);
nid.hWnd = hwnd;
nid.hIcon = LoadIcon(NULL, IDI_APPLICATION);
nid.szTip[0] = 'T'; nid.szTip[1] = 'V'; nid.szTip[2] = '\0';
nid.uID = 1;
nid.uCallbackMessage = 10101;
nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;

Shell_NotifyIcon(NIM_ADD, &nid);

LONG toolWindowExStyle = WS_EX_TOOLWINDOW;
ShowWindow(hwnd, SW_HIDE);
SetWindowLong(hwnd, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
// SetWindowLongPtr(hwnd, GWL_EXSTYLE, (LONG_PTR) &toolWindowExStyle);
ShowWindow(hwnd, SW_SHOW);

isTrayIcon=true;
} else {
//Remove tray icon here
if (isTrayIcon) {
Shell_NotifyIcon(NIM_DELETE, &nid);

LONG appWindowExStyle = WS_EX_APPWINDOW;
ShowWindow(hwnd, SW_HIDE);
// SetWindowLongPtr(hwnd, GWL_EXSTYLE, (LONG_PTR) &appWindowExStyle);
SetWindowLong(hwnd, GWL_EXSTYLE, WS_EX_APPWINDOW);
ShowWindow(hwnd, SW_SHOW);

isTrayIcon=false;
}
}
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
}


int __stdcall WinMain(HINSTANCE hPrevInstance, HINSTANCE hInstance, LPSTR CmdLine, int nCmdShow) {

WNDCLASSEX wc;
int ret=0;

wc.cbClsExtra=0;
wc.cbSize=sizeof(WNDCLASSEX);
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH) (COLOR_WINDOW+1);
wc.hCursor=LoadCursor(NULL, IDC_ARROW);
wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
wc.hIconSm=LoadIcon(NULL, IDI_APPLICATION);
wc.hInstance=hInstance;
wc.lpfnWndProc=WndProc;
wc.lpszClassName="Marshal";
wc.lpszMenuName=NULL;
wc.style=0;

ret = RegisterClassExA(&wc);
if (ret==0) {
MessageBoxA(NULL, "Could not register window class", "Error", MB_OK);
ExitProcess(-1);
}


HWND hwnd;
hwnd = CreateWindowEx(0, "Marshal", "Video Game", WS_OVERLAPPEDWINDOW, 10, 10, 320, 200, NULL, NULL, hInstance, NULL);

if (hwnd==NULL) {
MessageBoxA(NULL, "Could not instantiate window class", "Error", MB_OK);
ExitProcess(-1);
}


ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);


MSG msg;
while (GetMessage(&msg, NULL, 0, 0)>0) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return (int) msg.wParam;

}

0 Comments:

Post a Comment

<< Home