diff --git a/win/win32/mhmain.c b/win/win32/mhmain.c index fd8a12726..48d282926 100644 --- a/win/win32/mhmain.c +++ b/win/win32/mhmain.c @@ -71,21 +71,71 @@ void register_main_window_class() wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = GetNHApp()->hApp; - wcex.hIcon = LoadIcon(GetNHApp()->hApp, (LPCTSTR)IDI_WINHACK); + wcex.hIcon = LoadIcon(GetNHApp()->hApp, (LPCTSTR)IDI_NETHACKW); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); - wcex.lpszMenuName = (TCHAR*)IDC_WINHACK; + wcex.lpszMenuName = (TCHAR*)IDC_NETHACKW; wcex.lpszClassName = szMainWindowClass; RegisterClass(&wcex); } - +/* + * Keypad keys are translated to the normal values below. + * Shifted keypad keys are translated to the + * shift values below. + */ + +enum KEY_INDEXES { + KEY_NW, KEY_N, KEY_NE, KEY_MINUS, + KEY_W, KEY_STAY, KEY_E, KEY_PLUS, + KEY_SW, KEY_S, KEY_SE, + KEY_INV, KEY_WAITLOOK, + KEY_LAST}; + + static const unsigned char + /* normal, shift, control */ + keypad[KEY_LAST][3] = { + {'y', 'Y', C('y')}, /* 7 */ + {'k', 'K', C('k')}, /* 8 */ + {'u', 'U', C('u')}, /* 9 */ + {'m', C('p'), C('p')}, /* - */ + {'h', 'H', C('h')}, /* 4 */ + {'g', 'g', 'g'}, /* 5 */ + {'l', 'L', C('l')}, /* 6 */ + {'p', 'P', C('p')}, /* + */ + {'b', 'B', C('b')}, /* 1 */ + {'j', 'J', C('j')}, /* 2 */ + {'n', 'N', C('n')}, /* 3 */ + {'i', 'I', C('i')}, /* Ins */ + {'.', ':', ':'} /* Del */ +}, numpad[KEY_LAST][3] = { + {'7', M('7'), '7'}, /* 7 */ + {'8', M('8'), '8'}, /* 8 */ + {'9', M('9'), '9'}, /* 9 */ + {'m', C('p'), C('p')}, /* - */ + {'4', M('4'), '4'}, /* 4 */ + {'g', 'G', 'g'}, /* 5 */ + {'6', M('6'), '6'}, /* 6 */ + {'p', 'P', C('p')}, /* + */ + {'1', M('1'), '1'}, /* 1 */ + {'2', M('2'), '2'}, /* 2 */ + {'3', M('3'), '3'}, /* 3 */ + {'i', 'I', C('i')}, /* Ins */ + {'.', ':', ':'} /* Del */ +}; + + +#define STATEON(x) ((GetKeyState(x) & 0xFFFE) != 0) +#define KEYTABLE(x) ((iflags.num_pad ? numpad : keypad)[x] \ + [(STATEON(VK_SHIFT) ? 1 : STATEON(VK_CONTROL) ? 2 : 0)]) + /* // FUNCTION: WndProc(HWND, unsigned, WORD, LONG) // // PURPOSE: Processes messages for the main window. */ + LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PNHMainWindow data; @@ -112,40 +162,54 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar switch (wParam) { case VK_LEFT: - NHEVENT_KBD('4') + NHEVENT_KBD(KEYTABLE(KEY_W)); return 0; case VK_RIGHT: - NHEVENT_KBD('6') + NHEVENT_KBD(KEYTABLE(KEY_E)); return 0; case VK_UP: - NHEVENT_KBD('8') + NHEVENT_KBD(KEYTABLE(KEY_N)); return 0; case VK_DOWN: - NHEVENT_KBD('2') + NHEVENT_KBD(KEYTABLE(KEY_S)); return 0; case VK_HOME: - NHEVENT_KBD('7') + NHEVENT_KBD(KEYTABLE(KEY_NW)); return 0; case VK_END: - NHEVENT_KBD('1') + NHEVENT_KBD(KEYTABLE(KEY_SW)); return 0; case VK_PRIOR: - NHEVENT_KBD('9') + NHEVENT_KBD(KEYTABLE(KEY_NE)); return 0; case VK_NEXT: - NHEVENT_KBD('3') + NHEVENT_KBD(KEYTABLE(KEY_SE)); return 0; + case VK_DECIMAL: case VK_DELETE: - NHEVENT_KBD('.') + NHEVENT_KBD(KEYTABLE(KEY_WAITLOOK)); return 0; + + case VK_INSERT: + case VK_NUMPAD0: + NHEVENT_KBD(KEYTABLE(KEY_INV)); + return 0; + + case VK_SUBTRACT: + return 0; + NHEVENT_KBD(KEYTABLE(KEY_MINUS)); + + case VK_ADD: + return 0; + NHEVENT_KBD(KEYTABLE(KEY_PLUS)); } return 1; } break; @@ -177,7 +241,7 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar case WM_CLOSE: { /* exit gracefully */ - switch(MessageBox(hWnd, TEXT("Save?"), TEXT("WinHack"), MB_YESNOCANCEL | MB_ICONQUESTION)) { + switch(MessageBox(hWnd, TEXT("Save?"), TEXT("NetHack for Windows"), MB_YESNOCANCEL | MB_ICONQUESTION)) { case IDYES: NHEVENT_KBD('y'); dosave(); break; case IDNO: NHEVENT_KBD('q'); done(QUIT); break; case IDCANCEL: break; diff --git a/win/win32/mhmenu.c b/win/win32/mhmenu.c index 0be8a6914..b8cf502fb 100644 --- a/win/win32/mhmenu.c +++ b/win/win32/mhmenu.c @@ -7,6 +7,7 @@ #include "mhmain.h" #include "mhmsg.h" #include "mhfont.h" +#include #define MENU_MARGIN 0 #define NHMENU_STR_SIZE BUFSZ @@ -312,7 +313,7 @@ BOOL CALLBACK MenuWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) } break; case NM_CLICK: { - LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE) lParam; + LPNMLISTVIEW lpnmitem = (LPNMLISTVIEW) lParam; if( lpnmitem->iItem==-1 ) return 0; if( data->how==PICK_ANY ) { SelectMenuItem( diff --git a/win/win32/mswproc.c b/win/win32/mswproc.c index fbdbde3d4..b94ddf179 100644 --- a/win/win32/mswproc.c +++ b/win/win32/mswproc.c @@ -580,7 +580,17 @@ end_menu(window, prompt) */ void mswin_end_menu(winid wid, const char *prompt) { + TCHAR wbuf[255]; logDebug("mswin_end_menu(%d, %s)\n", wid, prompt); + if ((wid >= 0) && + (wid < MAXWINDOWS) && + (GetNHApp()->windowlist[wid].win != NULL)) + { + SetWindowText ( + GetNHApp()->windowlist[wid].win, + NH_A2W(prompt, wbuf ,sizeof(wbuf)) + ); + } } /* diff --git a/win/win32/resource.h b/win/win32/resource.h index 263d6b354..79d7baf5b 100644 --- a/win/win32/resource.h +++ b/win/win32/resource.h @@ -9,8 +9,8 @@ #define IDM_ABOUT 104 #define IDM_EXIT 105 #define IDS_HELLO 106 -#define IDI_WINHACK 107 -#define IDC_WINHACK 109 +#define IDI_NETHACKW 107 +#define IDC_NETHACKW 109 #define IDR_MAINFRAME 128 #define IDB_TILES 129 #define IDD_TEXT 130 diff --git a/win/win32/winhack.c b/win/win32/winhack.c index cef897ba0..ac40bee19 100644 --- a/win/win32/winhack.c +++ b/win/win32/winhack.c @@ -49,7 +49,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, /* init applicatio structure */ _nethack_app.hApp = hInstance; - _nethack_app.hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_WINHACK); + _nethack_app.hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_NETHACKW); _nethack_app.hMainWnd = NULL; _nethack_app.hPopupWnd = NULL; _nethack_app.bmpTiles = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_TILES)); diff --git a/win/win32/winhack.rc b/win/win32/winhack.rc index c9a5f1037..ee7e2e7ee 100644 --- a/win/win32/winhack.rc +++ b/win/win32/winhack.rc @@ -35,14 +35,14 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -IDI_WINHACK ICON DISCARDABLE "NETHACK.ICO" +IDI_NETHACKW ICON DISCARDABLE "NETHACK.ICO" ///////////////////////////////////////////////////////////////////////////// // // Menu // -IDC_WINHACK MENU DISCARDABLE +IDC_NETHACKW MENU DISCARDABLE BEGIN POPUP "&File" BEGIN @@ -85,7 +85,7 @@ END // Accelerator // -IDC_WINHACK ACCELERATORS MOVEABLE PURE +IDC_NETHACKW ACCELERATORS MOVEABLE PURE BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT @@ -118,9 +118,12 @@ BEGIN END IDD_MENU DIALOGEX 0, 0, 187, 153 -STYLE WS_POPUP | WS_CLIPSIBLINGS | WS_THICKFRAME +STYLE WS_POPUP | WS_CLIPSIBLINGS | WS_THICKFRAME | WS_CAPTION EXSTYLE WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT | WS_EX_STATICEDGE -FONT 8, "MS Sans Serif", 0, 0, 0x1 +FONT 8, "MS Sans Serif" +#ifndef __BORLANDC__ + , 0, 0, 0x1 +#endif BEGIN DEFPUSHBUTTON "OK",IDOK,7,132,50,14,BS_FLAT PUSHBUTTON "Cancel",IDCANCEL,130,132,50,14,BS_FLAT @@ -275,7 +278,7 @@ END STRINGTABLE DISCARDABLE BEGIN IDS_APP_TITLE "NetHack for Windows - Graphical Port" - IDC_WINHACK "WINHACK" + IDC_NETHACKW "NETHACKW" END #endif // English (U.S.) resources