void mswin_select_map_mode(int mode)
{
PNHMainWindow data;
+ winid map_id;
+
+ map_id = WIN_MAP;
data = (PNHMainWindow)GetWindowLong(GetNHApp()->hMainWnd, GWL_USERDATA);
/* override for Rogue level */
}
iflags.wc_map_mode = mode;
- mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), mode);
+
+ /*
+ ** first, check if WIN_MAP has been inialized.
+ ** If not - attempt to retrieve it by type, then check it again
+ */
+ if( map_id==WIN_ERR )
+ map_id = mswin_winid_from_type(NHW_MAP);
+ if( map_id!=WIN_ERR )
+ mswin_map_mode(mswin_hwnd_from_winid(map_id), mode);
}
static struct t_menu2mapmode {
SIZE mapSize;
data = (PNHMapWindow)GetWindowLong(hWnd, GWL_USERDATA);
- if (!data) return mode;
if( mode == data->mapMode ) return mode;
oldMode = data->mapMode;
#endif
mswin_nh_input_init();
+ /* set it to WIN_ERR so we can detect attempts to
+ use this ID before it is inialized */
+ WIN_MAP = WIN_ERR;
/* Read Windows settings from the reqistry */
mswin_read_reg();
(wid < MAXWINDOWS) &&
(GetNHApp()->windowlist[wid].win != NULL))
{
- SendMessage(
- GetNHApp()->windowlist[wid].win,
- WM_MSNH_COMMAND, (WPARAM)MSNH_MSG_CLEAR_WINDOW, (LPARAM)NULL );
- }
-
#ifdef REINCARNATION
- if( Is_rogue_level(&u.uz) )
- mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), ROGUE_LEVEL_MAP_MODE);
- else
- mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), iflags.wc_map_mode);
+ if( GetNHApp()->windowlist[wid].type == NHW_MAP ) {
+ if( Is_rogue_level(&u.uz) )
+ mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), ROGUE_LEVEL_MAP_MODE);
+ else
+ mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), iflags.wc_map_mode);
+ }
#endif
+
+ SendMessage(
+ GetNHApp()->windowlist[wid].win,
+ WM_MSNH_COMMAND, (WPARAM)MSNH_MSG_CLEAR_WINDOW, (LPARAM)NULL );
+ }
}
/* -- Display the window on the screen. If there is data