// WayWind.cpp // Guy Simmons, 31st July 1998. #include #include #include #include #include #include "resource.h" #include "EdStrings.h" #include "waywind.h" //--------------------------------------------------------------- int waypoint_colour, waypoint_group; UBYTE button_colours[WAY_COLOURS][3] = { { 0, 0, 0 }, { 255, 255, 255 }, { 255, 0, 0 }, { 255, 255, 0 }, { 0, 255, 0 }, { 0, 255, 255 }, { 0, 0, 255 }, { 255, 0, 255 }, { 238, 176, 176 }, { 139, 112, 85 }, { 127, 76, 180 }, { 76, 196, 174 }, { 195, 52, 3 }, { 171, 249, 167 }, { 168, 178, 54 } }; TCHAR button_classes[WAY_COLOURS][_MAX_PATH]; extern HCURSOR GEDIT_arrow; extern HINSTANCE GEDIT_hinstance; extern HWND GEDIT_client_wnd, GEDIT_engine_wnd, GEDIT_frame_wnd, GEDIT_way_wnd; //--------------------------------------------------------------- void update_combos(HWND parent) { /* int c0, selected; HWND the_combo; // Get a handle to the main combo & the currently selected item. the_combo = GetDlgItem(parent,IDC_COMBO1); selected = SendMessage(the_combo,CB_GETCURSEL,0,0); // Now set the state of all the sub combos. for(c0=IDC_COMBO2;c0<=IDC_COMBO8;c0++) { the_combo = GetDlgItem(parent,c0); if(((c0-IDC_COMBO2)+1)==selected) EnableWindow(the_combo,TRUE); else EnableWindow(the_combo,FALSE); } */ } //--------------------------------------------------------------- #define INIT_COMBO_BOX(i,s) the_ctrl = GetDlgItem(hWnd,i); \ c0 = 1; \ lbitem_str = s[0]; \ while(*lbitem_str!='!') \ { \ SendMessage(the_ctrl,CB_ADDSTRING,0,(LPARAM)lbitem_str); \ lbitem_str = s[c0++]; \ } BOOL CALLBACK waypoint_proc ( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) { /* BOOL update = FALSE; int c0, ctrl_id, sel_id; HBRUSH outline_brush; HDC hdc; HWND the_ctrl; LPDRAWITEMSTRUCT draw_item; PAINTSTRUCT ps; POINT bottom_right, top_left; RECT button_rect, caption_rect; LPTSTR lbitem_str; TCHAR edit_text[MAX_PATH]; switch(message) { case WM_INITDIALOG: // Init the 'Action' combos. INIT_COMBO_BOX(IDC_COMBO1,wtype_strings) INIT_COMBO_BOX(IDC_COMBO2,wplayer_strings) INIT_COMBO_BOX(IDC_COMBO3,wenemy_strings) INIT_COMBO_BOX(IDC_COMBO4,witem_strings) INIT_COMBO_BOX(IDC_COMBO5,wsfx_strings) INIT_COMBO_BOX(IDC_COMBO6,wvfx_strings) INIT_COMBO_BOX(IDC_COMBO7,wcscenes_strings) INIT_COMBO_BOX(IDC_COMBO8,wmessage_strings) update_combos(hWnd); // Init the edit thingy. the_ctrl = GetDlgItem(hWnd,IDC_EDIT1); SendMessage(the_ctrl,EM_SETLIMITTEXT,1,0); SendMessage(the_ctrl,WM_SETTEXT,0,(LPARAM)"A"); return TRUE; case WM_VSCROLL: if(GetWindowLong((HWND)lParam,GWL_ID)==IDC_SCROLLBAR1) { // Make the 'character' go up or down. the_ctrl = GetDlgItem(hWnd,IDC_EDIT1); SendMessage(the_ctrl,WM_GETTEXT,2,(LPARAM)&edit_text); switch(LOWORD(wParam)) { case SB_LINEDOWN: edit_text[0]--; if(edit_text[0]<'A') edit_text[0] = 'Z'; SendMessage(the_ctrl,WM_SETTEXT,0,(LPARAM)edit_text); SendMessage(the_ctrl,EM_SETSEL,0,-1); return TRUE; case SB_LINEUP: edit_text[0]++; if(edit_text[0]>'Z') edit_text[0] = 'A'; SendMessage(the_ctrl,WM_SETTEXT,0,(LPARAM)edit_text); SendMessage(the_ctrl,EM_SETSEL,0,-1); return TRUE; } } break; case WM_DRAWITEM: case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_CUSTOM1: case IDC_CUSTOM2: case IDC_CUSTOM3: case IDC_CUSTOM4: case IDC_CUSTOM5: case IDC_CUSTOM6: case IDC_CUSTOM7: case IDC_CUSTOM8: hdc = GetDC(hWnd); // Erase the old selected colour box. the_ctrl = GetDlgItem(hWnd,waypoint_colour+IDC_CUSTOM1); GetWindowRect(the_ctrl,&button_rect); top_left.x = button_rect.left; top_left.y = button_rect.top; bottom_right.x = button_rect.right; bottom_right.y = button_rect.bottom; ScreenToClient(hWnd,&top_left); ScreenToClient(hWnd,&bottom_right); SetRect(&button_rect,top_left.x,top_left.y,bottom_right.x,bottom_right.y); InflateRect(&button_rect,3,3); FrameRect(hdc,&button_rect,(HBRUSH)GetStockObject(LTGRAY_BRUSH)); // Set the new one & draw it. waypoint_colour = LOWORD(wParam)-IDC_CUSTOM1; the_ctrl = GetDlgItem(hWnd,LOWORD(wParam)); GetWindowRect(the_ctrl,&button_rect); top_left.x = button_rect.left; top_left.y = button_rect.top; bottom_right.x = button_rect.right; bottom_right.y = button_rect.bottom; ScreenToClient(hWnd,&top_left); ScreenToClient(hWnd,&bottom_right); SetRect(&button_rect,top_left.x,top_left.y,bottom_right.x,bottom_right.y); InflateRect(&button_rect,3,3); DrawFocusRect(hdc,&button_rect); ReleaseDC(hWnd,hdc); return TRUE; case IDC_COMBO1: if(HIWORD(wParam)==CBN_SELCHANGE) { update_combos(hWnd); } return TRUE; case IDC_EDIT1: if(HIWORD(wParam)==EN_UPDATE) { // Get the new text. the_ctrl = (HWND)lParam; SendMessage(the_ctrl,WM_GETTEXT,2,(LPARAM)&edit_text); // Make sure the text is in range. if(edit_text[0]<'A' || edit_text[0]>'z' || (edit_text[0]>'Z' && edit_text[0]<'a')) { edit_text[0] = waypoint_group+'A'; update = TRUE; } // Now make sure it's upper case. if(islower(edit_text[0])) { edit_text[0] = toupper(edit_text[0]); update = TRUE; } // Set the text if necessary. if(update) SendMessage(the_ctrl,WM_SETTEXT,0,(LPARAM)edit_text); // Select it regardless. SendMessage(the_ctrl,EM_SETSEL,0,-1); // Set the new group. waypoint_group = edit_text[0]-'A'; return TRUE; } break; } break; } */ return FALSE; } //--------------------------------------------------------------- LRESULT CALLBACK button_proc ( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) { DRAWITEMSTRUCT draw_item; switch(message) { case WM_LBUTTONDOWN: // Notify the parent that this colour box has been clicked. SendMessage ( GetParent(hWnd), WM_COMMAND, (BN_CLICKED<<16)|GetWindowLong(hWnd,GWL_ID), (LPARAM)hWnd ); return 0; case WM_PAINT: // Draw the colour box & if it's the selected box, force an update. DefWindowProc(hWnd,message,wParam,lParam); if(GetDlgCtrlID(hWnd)==waypoint_colour+IDC_CUSTOM_1) { draw_item.CtlID = waypoint_colour+IDC_CUSTOM_1; draw_item.itemAction = ODA_DRAWENTIRE; SendMessage ( GetParent(hWnd), WM_DRAWITEM, waypoint_colour+IDC_CUSTOM_1, (LPARAM)&draw_item ); } return 0; } return DefWindowProc(hWnd,message,wParam,lParam); } //--------------------------------------------------------------- BOOL init_wwind(void) { int c0; WNDCLASSEX new_class; // Initialise globals. waypoint_colour = 0; // Create the button classes. for(c0=0;c0