From 6e173ddf5ff9c97abf2ed2eab3f4267c65553036 Mon Sep 17 00:00:00 2001 From: "nethack.allison" Date: Sun, 27 Jan 2002 21:37:31 +0000 Subject: [PATCH] win32gui patches (from Yitzhak) [...] One of them deals with the patch you just sent, that changes the name but does so more extensively, particularly, also in the Save dialog in mhmain.c. Another is one of the changes to winhack.rc to make it compile under Borland. This also (beyond patches I sent): fixes no Options prompt bug, and fixes up the menu bar (which I broke in one of my patches). Tested on msc/bcc tty/win makefiles and vc ide. --- win/win32/mhmain.c | 90 +++++++++++++++++++++++++++++++++++++------- win/win32/mhmenu.c | 3 +- win/win32/mswproc.c | 10 +++++ win/win32/resource.h | 4 +- win/win32/winhack.c | 2 +- win/win32/winhack.rc | 15 +++++--- 6 files changed, 101 insertions(+), 23 deletions(-) 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