Well, I managed to get my base like converter to run through my menu lol, but when I do the exact same thing to create another dialog window for like say, a hex calculator, it doesnt work =/, the weird part is, If I call it Base Window, the hex calc works fine through my base window in my menu.
Heres main.cpp source:
Code:
#include <windows.h>
#include "hex.h"
const char g_ClassName[]="hwnd window class name";
const char g_BaseClassName[]="base class name";
HWND BaseWindow;
HWND HexWindow;
HWND hEdit;
HWND hEdit_Dec,hEdit_Oct,hEdit_Hex,hEdit_Bin;
HFONT hfDefault = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
BOOL CALLBACK HexWindowProc(HWND hwnd,UINT mess,WPARAM wParam,LPARAM lParam)
{
switch(mess)
{
case WM_CLOSE:
ShowWindow(BaseWindow,SW_HIDE);
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case EXTRA_HEX_CALC_CALL:
ShowWindow(HexWindow,SW_SHOW);
break;
}
}
break;
default:
return false;
}
return true;
}
BOOL CALLBACK BaseWindowProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_CLOSE:
ShowWindow(BaseWindow,SW_HIDE);
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case BASE_CONVERT_CLOSE:
ShowWindow(BaseWindow,SW_HIDE);
break;
case BASE_CONVERT:
{
int x;
char hex[MAX_PATH];
char oct[MAX_PATH];
char bin[MAX_PATH];
x = GetDlgItemInt(BaseWindow,BASE_HEDIT_DEC,NULL,false);
SetDlgItemText(BaseWindow,BASE_HEDIT_HEX,itoa(x,hex,16));
SetDlgItemText(BaseWindow,BASE_HEDIT_OCT,itoa(x,oct,8));
SetDlgItemText(BaseWindow,BASE_HEDIT_BIN,itoa(x,bin,2));
}
break;
}
}
break;
default:
return false;
}
return true;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case HWND_FILE_EXIT:
PostQuitMessage(0);
break;
case EXTRA_BASE_CONVERT_CALL:
ShowWindow(BaseWindow,SW_SHOW);
break;
}
}
break;
case WM_CREATE:
{
BaseWindow = CreateDialog(GetModuleHandle(NULL),MAKEINTRESOURCE(EXTRA_BASE_CONVERT),
hwnd,BaseWindowProc);
ShowWindow(BaseWindow,SW_HIDE);
HexWindow = CreateDialog(GetModuleHandle(NULL),MAKEINTRESOURCE(EXTRA_HEX_CALC),
hwnd,HexWindowProc);
ShowWindow(HexWindow,SW_HIDE);
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE,
"EDIT",
"",
WS_CHILD | WS_VISIBLE | ES_MULTILINE | WS_VSCROLL,
0,0,
100,100,
hwnd,
(HMENU)HWND_HEDIT,
GetModuleHandle(NULL),
NULL);
SendMessage(hEdit,WM_SETFONT,(WPARAM)hfDefault,MAKELPARAM(false,0));
}
break;
case WM_SIZE:
{
RECT hwnd_cord;
GetClientRect(hwnd,&hwnd_cord);
SetWindowPos(hEdit,hwnd,0,0,hwnd_cord.right,hwnd_cord.bottom,SWP_NOZORDER);
}
break;
default:
return DefWindowProc(hwnd,msg,wParam,lParam);
}
}
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR nCmdLine,
int nCmdShow)
{
HWND hwnd;
MSG Message;
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.cbWndExtra = 0;
wc.cbClsExtra = 0;
wc.style = 0;
wc.hbrBackground = CreateSolidBrush(RGB(0,0,100));
wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wc.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.lpfnWndProc = WndProc;
wc.lpszMenuName = MAKEINTRESOURCE(HWND_MENU);
wc.lpszClassName = g_ClassName;
RegisterClassEx(&wc);
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,
g_ClassName,
"Hex Editor",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
HWND_DESKTOP,
NULL,
hInstance,
NULL);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&Message,NULL,0,0)>0)
{
TranslateMessage(&Message);
DispatchMessage (&Message);
}
return Message.wParam;
}
Heres my hex.h
Code:
//menu identifiers
#define HWND_MENU 100
//hwnd_menu item identifiers
#define HWND_FILE_EXIT 200
#define HWND_FILE_OPEN 201
#define HWND_FILE_SAVEAS 202
//Dialog identifiers
#define EXTRA_BASE_CONVERT 300
#define EXTRA_BASE_CONVERT_CALL 301
#define EXTRA_HEX_CALC_CALL 302
#define EXTRA_HEX_CALC 303
#define BASE_CONVERT 304
#define BASE_CONVERT_CLOSE 305
#define BASE_HEDIT_DEC 306
#define BASE_HEDIT_BIN 307
#define BASE_HEDIT_HEX 308
#define BASE_HEDIT_OCT 309
//Edit box identifiers
#define HWND_HEDIT 400
//Hex calculator Identifiers
#define HEX_BUTTON_1 401
#define HEX_BUTTON_2 402
#define HEX_BUTTON_3 403
#define HEX_BUTTON_4 404
#define HEX_BUTTON_5 405
#define HEX_BUTTON_6 406
#define HEX_BUTTON_7 407
#define HEX_BUTTON_8 408
#define HEX_BUTTON_9 409
#define HEX_BUTTON_CALC 410
#define HEX_BUTTON_DIV 411
#define HEX_BUTTON_MUL 412
#define HEX_BUTTON_SUB 413
#define HEX_BUTTON_ADD 414
#define HEX_HEDIT 415
#define HEX_CALL 416
and heres my untitled.rc
Code:
#include <windows.h>
#include "hex.h"
HWND_MENU MENU
{
POPUP "&File"
{
MENUITEM "&Open",HWND_FILE_OPEN
MENUITEM SEPARATOR
MENUITEM "&Save As",HWND_FILE_SAVEAS
MENUITEM SEPARATOR
MENUITEM "E&xit",HWND_FILE_EXIT
}
POPUP "E&xtras"
{
MENUITEM "&Base Converter",EXTRA_BASE_CONVERT_CALL
MENUITEM "&Hex Calculator",EXTRA_HEX_CALC_CALL
}
}
EXTRA_BASE_CONVERT DIALOGEX 0,0,200,100
STYLE DS_MODALFRAME | WS_POPUP | WS_SYSMENU
EXSTYLE WS_EX_TOOLWINDOW
FONT 8,"MS Sans Serif"
CAPTION "Base Converter"
{
DEFPUSHBUTTON "Close",BASE_CONVERT_CLOSE,100,70,50,15
DEFPUSHBUTTON "Convert",BASE_CONVERT,50,70,50,15
EDITTEXT BASE_HEDIT_DEC,10,10,75,13,WS_VISIBLE|WS_BORDER|ES_MULTILINE|ES_NUMBER
EDITTEXT BASE_HEDIT_HEX,10,40,75,13,WS_VISIBLE|WS_BORDER|ES_MULTILINE|ES_READONLY
EDITTEXT BASE_HEDIT_OCT,105,10,75,13,WS_VISIBLE|WS_BORDER|ES_MULTILINE|ES_READONLY
EDITTEXT BASE_HEDIT_BIN,105,40,75,26,WS_VISIBLE|WS_HSCROLL|WS_BORDER|ES_MULTILINE|ES_READONLY
}
EXTRA_HEX_CALC DIALOGEX 0,0,200,100
STYLE DS_MODALFRAME | WS_POPUP | WS_SYSMENU
EXSTYLE WS_EX_TOOLWINDOW
FONT 8,"MS Sans Serif"
CAPTION "Hex Calculator"
{
DEFPUSHBUTTON "1",HEX_BUTTON_1,0,0,5,5
}
I think the problem is my HexWindowProc function in my main.cpp file, but im not sure... I tried running the hex calculator and base converter through the same procedure function, but that didnt work either =/.