Code:
#include <windows.h>
#include <shellapi.h>
#include "Resource.h"
const char g_szClassName[] = "Windows App";
NOTIFYICONDATA minimized;
LRESULT CALLBACK WndProc(HWND window, UINT message, WPARAM wparam, LPARAM lparam)
{
POINT pt;
HMENU hPopupMenu = CreatePopupMenu();
AppendMenu(hPopupMenu, MF_STRING, IDMI_RESTORE, "Restore");
AppendMenu(hPopupMenu, MF_STRING, IDMI_CLOSE, "Exit");
switch(message)
{
case PUGBOT_SOCKET_MSG:
{
if (WSAGETSELECTERROR(lparam))
{
// ERROR
}
switch(WSAGETSELECTEVENT(lparam))
{
case FD_READ:
{
}
break;
case FD_WRITE:
{
}
break;
case FD_CONNECT:
{
}
break;
case FD_ACCEPT:
{
}
break;
}
}
break;
case WM_CREATE:
{ /*
HWND hServerName;
hServerName = CreateWindowEx(0, "Static", "Server:", WS_CHILD | WS_VISIBLE,
5, 5, 50, 25, window, (HMENU)IDD_NAME,
GetModuleHandle(NULL), NULL);
HWND hServerBox;
hServerBox = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "",
WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL,
55, 5, 175, 25,
window, (HMENU)IDD_SERVERBOX, GetModuleHandle(NULL), NULL);
HWND hPortName;
hPortName = CreateWindowEx(0, "Static", "Port:", WS_CHILD | WS_VISIBLE,
235, 5, 35, 25, window, (HMENU)IDD_NAME,
GetModuleHandle(NULL), NULL);
HWND hPortBox;
hPortBox = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "",
WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL,
270, 5, 55, 25,
window, (HMENU)IDD_PORTBOX, GetModuleHandle(NULL), NULL);
HWND hChannelName;
hPortName = CreateWindowEx(0, "Static", "Channel:", WS_CHILD | WS_VISIBLE,
330, 5, 60, 25, window, (HMENU)IDD_NAME,
GetModuleHandle(NULL), NULL);
HWND hChannelBox;
hChannelBox = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "",
WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL,
395, 5, 125, 25,
window, (HMENU)IDD_RECVBOX, GetModuleHandle(NULL), NULL);
HWND hConnectButton;
hConnectButton = CreateWindowEx(WS_EX_STATICEDGE,"BUTTON", "Connect",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
525, 5, 105, 60,
window, (HMENU)IDD_CONNECT, GetModuleHandle(NULL), NULL);
HWND hRecvBox;
hRecvBox = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL |
ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,
5, WINDOW_HIEGHT-400, WINDOW_WIDTH-15, WINDOW_HIEGHT-45-65-65,
window, (HMENU)IDD_RECVBOX, GetModuleHandle(NULL), NULL);
HWND hSendBox;
hSendBox = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "",
WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL,
5, WINDOW_HIEGHT-75, WINDOW_WIDTH-120, 25,
window, (HMENU)IDD_SENDBOX, GetModuleHandle(NULL), NULL);
HWND hSendButton;
hSendButton = CreateWindowEx(WS_EX_STATICEDGE,"BUTTON", "Send",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
WINDOW_WIDTH-110, WINDOW_HIEGHT-75, 100, 25,
window, (HMENU)IDD_SENDBUTTON, GetModuleHandle(NULL), NULL);
*/
}
break;
case WM_COMMAND:
{
switch(lparam)
{
case IDI_TRAY:
{
Shell_NotifyIcon(NIM_DELETE, &minimized);
if (LOWORD (wparam) == IDMI_RESTORE)
{
ShowWindow(window, SW_RESTORE);
SetForegroundWindow(window);
}
else if (LOWORD (wparam) == IDMI_CLOSE)
{
PostMessage(window, WM_CLOSE, 0, 0);
}
}
break;
}
switch(LOWORD(wparam))
{
case ID_FILE_EXIT:
{
PostMessage(window, WM_CLOSE, 0, 0);
}
break;
}
}
break;
case WM_SIZE:
{
switch (wparam)
{
case SIZE_MINIMIZED:
{
minimized.cbSize = sizeof(NOTIFYICONDATA);
minimized.hWnd = window;
minimized.uID = IDI_TRAY;
minimized.uFlags = NIF_ICON+NIF_MESSAGE+NIF_TIP;
minimized.uCallbackMessage = WM_SHELLNOTIFY;
minimized.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON));
lstrcpy(&minimized.szTip[0], "ADVERSARY");
ShowWindow(window, SW_HIDE);
Shell_NotifyIcon(NIM_ADD, &minimized);
return true;
}
break;
}
}
case WM_SHELLNOTIFY:
{
switch (wparam)
{
case IDI_TRAY:
{
if (lparam == WM_RBUTTONDOWN)
{
GetCursorPos(&pt);
TrackPopupMenu(hPopupMenu, TPM_RIGHTALIGN, pt.x, pt.y, 0, window, NULL);
return true;
}
else if (lparam == WM_LBUTTONDOWN)
{
SendMessage(window, WM_COMMAND, IDMI_RESTORE, 0);
return true;
}
}
default:
{
DefWindowProc(window, message, wparam, lparam);
return true;
}
}
}
break;
case WM_CLOSE:
DestroyWindow(window);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(window, message ,wparam, lparam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX info;
MSG message;
HWND window;
info.cbSize = sizeof(WNDCLASSEX);
info.style = 0;
info.lpfnWndProc = WndProc;
info.cbClsExtra = 0;
info.cbWndExtra = 0;
info.hInstance = hInstance;
info.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON));
info.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON), IMAGE_ICON, 16, 16, 0);
info.hCursor = LoadCursor(NULL, IDC_ARROW);
info.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
info.lpszMenuName = MAKEINTRESOURCE(IDR_MYMENU);
info.lpszClassName = g_szClassName;
if (!RegisterClassEx(&info))
{
MessageBox(NULL,"Window Registration Failed!","ERROR", MB_ICONEXCLAMATION | MB_OK);
return 0;
}
window = CreateWindowEx(0, g_szClassName, WINDOW_TITLE,
WS_OVERLAPPEDWINDOW&~WS_THICKFRAME&~WS_MAXIMIZEBOX,
CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, WINDOW_HIEGHT,
NULL, NULL, hInstance, NULL);
if (window == NULL)
{
MessageBox(NULL,"Window Creation Failed!","ERROR", MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(window,nCmdShow);
UpdateWindow(window);
while (GetMessage(&message,NULL,0,0) > 0)
{
TranslateMessage(&message);
DispatchMessage(&message);
}
return message.wParam;
}