79 lines
1.6 KiB
C
79 lines
1.6 KiB
C
/* NetHack may be freely redistributed. See license for details. */
|
|
|
|
#include "winMS.h"
|
|
#include "resource.h"
|
|
#include "mhcmd.h"
|
|
#include "mhinput.h"
|
|
|
|
LRESULT CALLBACK CommandWndProc(HWND, UINT, WPARAM, LPARAM);
|
|
|
|
struct cmd2key_map {
|
|
UINT cmd_code;
|
|
char f_char;
|
|
const char* text;
|
|
UINT image;
|
|
} cmd2key[] = {
|
|
{ IDC_CMD_MOVE_NW, '7', "7", 0 },
|
|
{ IDC_CMD_MOVE_N, '8', "8", 0 },
|
|
{ IDC_CMD_MOVE_NE, '9', "9", 0 },
|
|
{ IDC_CMD_MOVE_W, '4', "4", 0 },
|
|
{ IDC_CMD_MOVE_SELF, '.', ".", 0 },
|
|
{ IDC_CMD_MOVE_E, '6', "6", 0 },
|
|
{ IDC_CMD_MOVE_SW, '1', "1", 0 },
|
|
{ IDC_CMD_MOVE_S, '2', "2", 0 },
|
|
{ IDC_CMD_MOVE_SE, '3', "3", 0 },
|
|
{ IDC_CMD_MOVE_UP, '<', "<", 0 },
|
|
{ IDC_CMD_MOVE_DOWN, '>', ">", 0 },
|
|
{ 0, 0 }
|
|
};
|
|
|
|
HWND mswin_init_command_window () {
|
|
HWND ret;
|
|
|
|
ret = CreateDialog(
|
|
GetNHApp()->hApp,
|
|
MAKEINTRESOURCE(IDD_COMMANDS),
|
|
GetNHApp()->hMainWnd,
|
|
CommandWndProc
|
|
);
|
|
if( !ret ) panic("Cannot create command window");
|
|
return ret;
|
|
}
|
|
|
|
void mswin_command_window_size (HWND hwnd, LPSIZE sz)
|
|
{
|
|
RECT rt;
|
|
GetWindowRect(hwnd, &rt);
|
|
sz->cx = rt.right - rt.left;
|
|
sz->cy = rt.bottom - rt.top;
|
|
}
|
|
|
|
LRESULT CALLBACK CommandWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
struct cmd2key_map* cmd_p;
|
|
|
|
switch (message)
|
|
{
|
|
case WM_COMMAND:
|
|
switch(HIWORD(wParam)) {
|
|
case BN_CLICKED:
|
|
for( cmd_p=cmd2key; cmd_p->cmd_code>0; cmd_p++ ) {
|
|
if( cmd_p->cmd_code==LOWORD(wParam) ) break;
|
|
}
|
|
|
|
if( cmd_p->cmd_code>0 ) {
|
|
MSNHEvent event;
|
|
ZeroMemory(&event, sizeof(event));
|
|
|
|
event.ch = cmd_p->f_char;
|
|
mswin_input_push(&event);
|
|
}
|
|
|
|
SetFocus(hWnd);
|
|
break;
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
|