]> granicus.if.org Git - nethack/commitdiff
win32gui patches (from Yitzhak)
authornethack.allison <nethack.allison>
Sun, 27 Jan 2002 21:37:31 +0000 (21:37 +0000)
committernethack.allison <nethack.allison>
Sun, 27 Jan 2002 21:37:31 +0000 (21:37 +0000)
[...]
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
win/win32/mhmenu.c
win/win32/mswproc.c
win/win32/resource.h
win/win32/winhack.c
win/win32/winhack.rc

index fd8a12726a24315f4f748da38cec4f01ddb8d183..48d282926f69298e62e4c9a5693b168303433b04 100644 (file)
@@ -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;
index 0be8a6914d9ab566926a9ae693e8c33004552eeb..b8cf502fb39256afbb838f7c1549929093e754c3 100644 (file)
@@ -7,6 +7,7 @@
 #include "mhmain.h"
 #include "mhmsg.h"
 #include "mhfont.h"
+#include <commctrl.h>
 
 #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(
index fbdbde3d4e1372a0f4266222e9810cc18b08ea3d..b94ddf17902d42ed69be9de437a808bb7767af07 100644 (file)
@@ -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))
+               );
+       }
 }
 
 /*
index 263d6b35429fa9841876bed5acb79eb290ee6b22..79d7baf5bc81c092ecdb710bb2a76b3473c2ff9c 100644 (file)
@@ -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
index cef897ba07e9a69f7bf7322f393fbe951e88f3ad..ac40bee19a03e61f0bd3f7b5e9df41cf8447e90b 100644 (file)
@@ -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));
index c9a5f1037ca255fe07cf4dc97fe72127fddbe763..ee7e2e7eeea49b45343cda90122e9b4b6d189237 100644 (file)
@@ -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