#define WIN32_LEAN_AND_MEAN
#include <afx.h>
#include <afxwin.h>
#include <windows.h>
typedef struct {
DWORD mVersion;
HWND mHwnd;
BOOL mKeep;
BOOL mUnicode;
} LOADINFO;
HWND mIRC_window;
#define ClassName "DLLWindowClass"
#define MYMENU_EXIT (WM_APP + 101)
#define MYMENU_MESSAGEBOX (WM_APP + 102)
LRESULT WINAPI DLLWindowProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message)
{
case WM_COMMAND:
switch(wParam)
{
case MYMENU_EXIT:
SendMessage(hwnd, WM_CLOSE, 0, 0);
break;
case MYMENU_MESSAGEBOX:
MessageBox(hwnd, _T("Test"), _T("MessageBox"), MB_OK);
break;
}
break;
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
// Creating our window's Menu
HMENU CreateDLLWindowMenu() {
HMENU hMenu;
hMenu = CreateMenu();
HMENU hMenuPopup;
if(hMenu==NULL)
return FALSE;
hMenuPopup = CreatePopupMenu();
AppendMenu (hMenuPopup, MF_STRING, MYMENU_EXIT, _T("Exit"));
AppendMenu (hMenu, MF_POPUP, (UINT_PTR) hMenuPopup, _T("File"));
hMenuPopup = CreatePopupMenu();
AppendMenu (hMenuPopup, MF_STRING, MYMENU_MESSAGEBOX, _T("MessageBox"));
AppendMenu (hMenu, MF_POPUP, (UINT_PTR) hMenuPopup, _T("Test"));
return hMenu;
}
class Win : public CWinThread {
public:
Win() {};
~Win() {};
virtual int Run() {
MSG messages;
while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
return 0;
};
virtual BOOL InitInstance() {
WNDCLASSEX wc;
wc.hInstance = NULL;
wc.lpszClassName = ClassName;
wc.lpfnWndProc = DLLWindowProc;
wc.style = CS_DBLCLKS;
wc.cbSize = sizeof (WNDCLASSEX);
wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wc.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor (NULL, IDC_ARROW);
wc.lpszMenuName = NULL;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
RegisterClassEx (&wc);
HMENU hMenu = CreateDLLWindowMenu();
HWND hwnd = CreateWindowEx (0, ClassName, NULL, WS_EX_PALETTEWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, mIRC_window, hMenu, NULL, NULL );
if (hwnd) {
UpdateWindow(hwnd);
ShowWindow (hwnd, SW_SHOWNORMAL);
return true;
}
return false;
};
};
Win* x;
EXTERN_C int WINAPI UnloadDll(int TimeOut) {
//x->ExitInstance();
//delete x;
return 0;
}
EXTERN_C void WINAPI LoadDll(LOADINFO *Load) {
Load->mKeep = 1; // stay loaded
mIRC_window = Load->mHwnd;
x = new Win;
x->InitInstance();
}
EXTERN_C int WINAPI window(HWND mWnd, HWND aWnd, TCHAR *data, TCHAR *parms, BOOL show, BOOL nopause) {
return 1;
}