12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328 |
- /*
- ===========================================================================
- Copyright (C) 1997-2006 Id Software, Inc.
- This file is part of Quake 2 Tools source code.
- Quake 2 Tools source code is free software; you can redistribute it
- and/or modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the License,
- or (at your option) any later version.
- Quake 2 Tools source code is distributed in the hope that it will be
- useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with Quake 2 Tools source code; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- ===========================================================================
- */
- #include "qe3.h"
- #include <process.h>
- #include "mru.h"
- #include "entityw.h"
- static HWND s_hwndToolbar;
- BOOL SaveRegistryInfo(const char *pszName, void *pvBuf, long lSize);
- BOOL LoadRegistryInfo(const char *pszName, void *pvBuf, long *plSize);
- static HWND CreateMyStatusWindow(HINSTANCE hInst);
- static HWND CreateToolBar(HINSTANCE hinst);
- extern int WXY_Print( void );
- /*
- ==============================================================================
- MENU
- ==============================================================================
- */
- void OpenDialog (void);
- void SaveAsDialog (void);
- qboolean ConfirmModified (void);
- void Select_Ungroup (void);
- void QE_ExpandBspString (char *bspaction, char *out, char *mapname)
- {
- char *in;
- char src[1024];
- char rsh[1024];
- char base[256];
- ExtractFileName (mapname, base);
- sprintf (src, "%s/maps/%s", ValueForKey(g_qeglobals.d_project_entity, "remotebasepath"), base);
- strcpy (rsh, ValueForKey(g_qeglobals.d_project_entity, "rshcmd"));
- in = ValueForKey( g_qeglobals.d_project_entity, bspaction );
- while (*in)
- {
- if (in[0] == '!')
- {
- strcpy (out, rsh);
- out += strlen(rsh);
- in++;
- continue;
- }
- if (in[0] == '$')
- {
- strcpy (out, src);
- out += strlen(src);
- in++;
- continue;
- }
- if (in[0] == '@')
- {
- *out++ = '"';
- in++;
- continue;
- }
- *out++ = *in++;
- }
- *out = 0;
- }
- void RunBsp (char *command)
- {
- char sys[1024];
- char batpath[1024];
- char outputpath[1024];
- char temppath[512];
- char name[1024];
- FILE *hFile;
- BOOL ret;
- PROCESS_INFORMATION ProcessInformation;
- STARTUPINFO startupinfo;
- SetInspectorMode (W_CONSOLE);
- if (bsp_process)
- {
- Sys_Printf ("BSP is still going...\n");
- return;
- }
- GetTempPath(512, temppath);
- sprintf (outputpath, "%sjunk.txt", temppath);
- strcpy (name, currentmap);
- if (region_active)
- {
- Map_SaveFile (name, false);
- StripExtension (name);
- strcat (name, ".reg");
- }
- Map_SaveFile (name, region_active);
- QE_ExpandBspString (command, sys, name);
- Sys_ClearPrintf ();
- Sys_Printf ("======================================\nRunning bsp command...\n");
- Sys_Printf ("\n%s\n", sys);
- //
- // write qe3bsp.bat
- //
- sprintf (batpath, "%sqe3bsp.bat", temppath);
- hFile = fopen(batpath, "w");
- if (!hFile)
- Error ("Can't write to %s", batpath);
- fprintf (hFile, sys);
- fclose (hFile);
- //
- // write qe3bsp2.bat
- //
- sprintf (batpath, "%sqe3bsp2.bat", temppath);
- hFile = fopen(batpath, "w");
- if (!hFile)
- Error ("Can't write to %s", batpath);
- fprintf (hFile, "%sqe3bsp.bat > %s", temppath, outputpath);
- fclose (hFile);
- Pointfile_Delete ();
- GetStartupInfo (&startupinfo);
- ret = CreateProcess(
- batpath, // pointer to name of executable module
- NULL, // pointer to command line string
- NULL, // pointer to process security attributes
- NULL, // pointer to thread security attributes
- FALSE, // handle inheritance flag
- 0 /*DETACHED_PROCESS*/, // creation flags
- NULL, // pointer to new environment block
- NULL, // pointer to current directory name
- &startupinfo, // pointer to STARTUPINFO
- &ProcessInformation // pointer to PROCESS_INFORMATION
- );
- if (!ret)
- Error ("CreateProcess failed");
- bsp_process = ProcessInformation.hProcess;
- Sleep (100); // give the new process a chance to open it's window
- BringWindowToTop( g_qeglobals.d_hwndMain ); // pop us back on top
- SetFocus (g_qeglobals.d_hwndCamera);
- }
- /*
- =============
- DoColor
- =============
- */
- qboolean DoColor(int iIndex)
- {
- CHOOSECOLOR cc;
- static COLORREF custom[16];
- cc.lStructSize = sizeof(cc);
- cc.hwndOwner = g_qeglobals.d_hwndMain;
- cc.hInstance = g_qeglobals.d_hInstance;
- cc.rgbResult =
- (int)(g_qeglobals.d_savedinfo.colors[iIndex][0]*255) +
- (((int)(g_qeglobals.d_savedinfo.colors[iIndex][1]*255))<<8) +
- (((int)(g_qeglobals.d_savedinfo.colors[iIndex][2]*255))<<16);
- cc.lpCustColors = custom;
- cc.Flags = CC_FULLOPEN|CC_RGBINIT;
- //cc.lCustData;
- //cc.lpfnHook;
- //cc.lpTemplateName
- if (!ChooseColor(&cc))
- return false;
- g_qeglobals.d_savedinfo.colors[iIndex][0] = (cc.rgbResult&255)/255.0;
- g_qeglobals.d_savedinfo.colors[iIndex][1] = ((cc.rgbResult>>8)&255)/255.0;
- g_qeglobals.d_savedinfo.colors[iIndex][2] = ((cc.rgbResult>>16)&255)/255.0;
- /*
- ** scale colors so that at least one component is at 1.0F
- ** if this is meant to select an entity color
- */
- if ( iIndex == COLOR_ENTITY )
- {
- float largest = 0.0F;
- if ( g_qeglobals.d_savedinfo.colors[iIndex][0] > largest )
- largest = g_qeglobals.d_savedinfo.colors[iIndex][0];
- if ( g_qeglobals.d_savedinfo.colors[iIndex][1] > largest )
- largest = g_qeglobals.d_savedinfo.colors[iIndex][1];
- if ( g_qeglobals.d_savedinfo.colors[iIndex][2] > largest )
- largest = g_qeglobals.d_savedinfo.colors[iIndex][2];
- if ( largest == 0.0F )
- {
- g_qeglobals.d_savedinfo.colors[iIndex][0] = 1.0F;
- g_qeglobals.d_savedinfo.colors[iIndex][1] = 1.0F;
- g_qeglobals.d_savedinfo.colors[iIndex][2] = 1.0F;
- }
- else
- {
- float scaler = 1.0F / largest;
- g_qeglobals.d_savedinfo.colors[iIndex][0] *= scaler;
- g_qeglobals.d_savedinfo.colors[iIndex][1] *= scaler;
- g_qeglobals.d_savedinfo.colors[iIndex][2] *= scaler;
- }
- }
- Sys_UpdateWindows (W_ALL);
- return true;
- }
- /* Copied from MSDN */
- BOOL DoMru(HWND hWnd,WORD wId)
- {
- char szFileName[128];
- OFSTRUCT of;
- BOOL fExist;
- GetMenuItem(g_qeglobals.d_lpMruMenu, wId, TRUE, szFileName, sizeof(szFileName));
- // Test if the file exists.
- fExist = OpenFile(szFileName ,&of,OF_EXIST) != HFILE_ERROR;
- if (fExist) {
- // Place the file on the top of MRU.
- AddNewItem(g_qeglobals.d_lpMruMenu,(LPSTR)szFileName);
- // Now perform opening this file !!!
- Map_LoadFile (szFileName);
- }
- else
- // Remove the file on MRU.
- DelMenuItem(g_qeglobals.d_lpMruMenu,wId,TRUE);
- // Refresh the File menu.
- PlaceMenuMRUItem(g_qeglobals.d_lpMruMenu,GetSubMenu(GetMenu(hWnd),0),
- ID_FILE_EXIT);
- return fExist;
- }
- /* handle all WM_COMMAND messages here */
- LONG WINAPI CommandHandler (
- HWND hWnd,
- WPARAM wParam,
- LPARAM lParam)
- {
- HMENU hMenu;
- switch (LOWORD(wParam))
- {
- //
- // file menu
- //
- case ID_FILE_EXIT:
- /* exit application */
- if (!ConfirmModified())
- return TRUE;
- PostMessage (hWnd, WM_CLOSE, 0, 0L);
- break;
- case ID_FILE_OPEN:
- if (!ConfirmModified())
- return TRUE;
- OpenDialog ();
- break;
- case ID_FILE_NEW:
- if (!ConfirmModified())
- return TRUE;
- Map_New ();
- break;
- case ID_FILE_SAVE:
- if (!strcmp(currentmap, "unnamed.map"))
- SaveAsDialog ();
- else
- Map_SaveFile (currentmap, false); // ignore region
- break;
- case ID_FILE_SAVEAS:
- SaveAsDialog ();
- break;
- case ID_FILE_LOADPROJECT:
- if (!ConfirmModified())
- return TRUE;
- ProjectDialog ();
- break;
- case ID_FILE_POINTFILE:
- if (g_qeglobals.d_pointfile_display_list)
- Pointfile_Clear ();
- else
- Pointfile_Check ();
- break;
- //
- // view menu
- //
- case ID_VIEW_ENTITY:
- SetInspectorMode(W_ENTITY);
- break;
- case ID_VIEW_CONSOLE:
- SetInspectorMode(W_CONSOLE);
- break;
- case ID_VIEW_TEXTURE:
- SetInspectorMode(W_TEXTURE);
- break;
- case ID_VIEW_100:
- g_qeglobals.d_xy.scale = 1;
- Sys_UpdateWindows (W_XY|W_XY_OVERLAY);
- break;
- case ID_VIEW_ZOOMIN:
- g_qeglobals.d_xy.scale *= 5.0/4;
- if (g_qeglobals.d_xy.scale > 16)
- g_qeglobals.d_xy.scale = 16;
- Sys_UpdateWindows (W_XY|W_XY_OVERLAY);
- break;
- case ID_VIEW_ZOOMOUT:
- g_qeglobals.d_xy.scale *= 4.0/5;
- if (g_qeglobals.d_xy.scale < 0.1)
- g_qeglobals.d_xy.scale = 0.1;
- Sys_UpdateWindows (W_XY|W_XY_OVERLAY);
- break;
- case ID_VIEW_Z100:
- z.scale = 1;
- Sys_UpdateWindows (W_Z|W_Z_OVERLAY);
- break;
- case ID_VIEW_ZZOOMIN:
- z.scale *= 5.0/4;
- if (z.scale > 4)
- z.scale = 4;
- Sys_UpdateWindows (W_Z|W_Z_OVERLAY);
- break;
- case ID_VIEW_ZZOOMOUT:
- z.scale *= 4.0/5;
- if (z.scale < 0.125)
- z.scale = 0.125;
- Sys_UpdateWindows (W_Z|W_Z_OVERLAY);
- break;
- case ID_VIEW_CENTER:
- camera.angles[ROLL] = camera.angles[PITCH] = 0;
- camera.angles[YAW] = 22.5 *
- floor( (camera.angles[YAW]+11)/22.5 );
- Sys_UpdateWindows (W_CAMERA|W_XY_OVERLAY);
- break;
- case ID_VIEW_UPFLOOR:
- Cam_ChangeFloor (true);
- break;
- case ID_VIEW_DOWNFLOOR:
- Cam_ChangeFloor (false);
- break;
- case ID_VIEW_SHOWNAMES:
- g_qeglobals.d_savedinfo.show_names = !g_qeglobals.d_savedinfo.show_names;
- CheckMenuItem ( GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWNAMES, MF_BYCOMMAND | (g_qeglobals.d_savedinfo.show_names ? MF_CHECKED : MF_UNCHECKED) );
- Map_BuildBrushData();
- Sys_UpdateWindows (W_XY);
- break;
- case ID_VIEW_SHOWCOORDINATES:
- g_qeglobals.d_savedinfo.show_coordinates ^= 1;
- CheckMenuItem ( GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWCOORDINATES, MF_BYCOMMAND | (g_qeglobals.d_savedinfo.show_coordinates ? MF_CHECKED : MF_UNCHECKED) );
- Sys_UpdateWindows (W_XY);
- break;
- case ID_VIEW_SHOWBLOCKS:
- g_qeglobals.show_blocks ^= 1;
- CheckMenuItem ( GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWBLOCKS, MF_BYCOMMAND | (g_qeglobals.show_blocks ? MF_CHECKED : MF_UNCHECKED) );
- Sys_UpdateWindows (W_XY);
- break;
- case ID_VIEW_SHOWLIGHTS:
- if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_LIGHTS ) & EXCLUDE_LIGHTS )
- CheckMenuItem ( GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWLIGHTS, MF_BYCOMMAND | MF_UNCHECKED );
- else
- CheckMenuItem ( GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWLIGHTS, MF_BYCOMMAND | MF_CHECKED );
- Sys_UpdateWindows (W_XY|W_CAMERA);
- break;
- case ID_VIEW_SHOWPATH:
- if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_PATHS ) & EXCLUDE_PATHS )
- CheckMenuItem ( GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWPATH, MF_BYCOMMAND | MF_UNCHECKED );
- else
- CheckMenuItem ( GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWPATH, MF_BYCOMMAND | MF_CHECKED );
- Sys_UpdateWindows (W_XY|W_CAMERA);
- break;
- case ID_VIEW_SHOWENT:
- if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_ENT ) & EXCLUDE_ENT )
- CheckMenuItem( GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWENT, MF_BYCOMMAND | MF_UNCHECKED);
- else
- CheckMenuItem( GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWENT, MF_BYCOMMAND | MF_CHECKED);
- Sys_UpdateWindows (W_XY|W_CAMERA);
- break;
- case ID_VIEW_SHOWWATER:
- if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_WATER ) & EXCLUDE_WATER )
- CheckMenuItem ( GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWWATER, MF_BYCOMMAND | MF_UNCHECKED );
- else
- CheckMenuItem ( GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWWATER, MF_BYCOMMAND | MF_CHECKED );
- Sys_UpdateWindows (W_XY|W_CAMERA);
- break;
- case ID_VIEW_SHOWCLIP:
- if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_CLIP ) & EXCLUDE_CLIP )
- CheckMenuItem ( GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWCLIP, MF_BYCOMMAND | MF_UNCHECKED );
- else
- CheckMenuItem ( GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWCLIP, MF_BYCOMMAND | MF_CHECKED );
- Sys_UpdateWindows (W_XY|W_CAMERA);
- break;
- case ID_VIEW_SHOWDETAIL:
- if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_DETAIL ) & EXCLUDE_DETAIL )
- {
- CheckMenuItem ( GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWDETAIL, MF_BYCOMMAND | MF_UNCHECKED );
- SetWindowText (g_qeglobals.d_hwndCamera, "Camera View (DETAIL EXCLUDED)");
- }
- else
- {
- CheckMenuItem ( GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWDETAIL, MF_BYCOMMAND | MF_CHECKED );
- SetWindowText (g_qeglobals.d_hwndCamera, "Camera View");
- }
- Sys_UpdateWindows (W_XY|W_CAMERA);
- break;
- case ID_VIEW_SHOWWORLD:
- if ( ( g_qeglobals.d_savedinfo.exclude ^= EXCLUDE_WORLD ) & EXCLUDE_WORLD )
- CheckMenuItem ( GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWWORLD, MF_BYCOMMAND | MF_UNCHECKED );
- else
- CheckMenuItem ( GetMenu(g_qeglobals.d_hwndMain), ID_VIEW_SHOWWORLD, MF_BYCOMMAND | MF_CHECKED );
- Sys_UpdateWindows (W_XY|W_CAMERA);
- break;
- //
- // grid menu
- //
- case ID_GRID_1:
- case ID_GRID_2:
- case ID_GRID_4:
- case ID_GRID_8:
- case ID_GRID_16:
- case ID_GRID_32:
- case ID_GRID_64:
- {
- hMenu = GetMenu(hWnd);
- CheckMenuItem(hMenu, ID_GRID_1, MF_BYCOMMAND | MF_UNCHECKED);
- CheckMenuItem(hMenu, ID_GRID_2, MF_BYCOMMAND | MF_UNCHECKED);
- CheckMenuItem(hMenu, ID_GRID_4, MF_BYCOMMAND | MF_UNCHECKED);
- CheckMenuItem(hMenu, ID_GRID_8, MF_BYCOMMAND | MF_UNCHECKED);
- CheckMenuItem(hMenu, ID_GRID_16, MF_BYCOMMAND | MF_UNCHECKED);
- CheckMenuItem(hMenu, ID_GRID_32, MF_BYCOMMAND | MF_UNCHECKED);
- CheckMenuItem(hMenu, ID_GRID_64, MF_BYCOMMAND | MF_UNCHECKED);
- switch (LOWORD(wParam))
- {
- case ID_GRID_1: g_qeglobals.d_gridsize = 0; break;
- case ID_GRID_2: g_qeglobals.d_gridsize = 1; break;
- case ID_GRID_4: g_qeglobals.d_gridsize = 2; break;
- case ID_GRID_8: g_qeglobals.d_gridsize = 3; break;
- case ID_GRID_16: g_qeglobals.d_gridsize = 4; break;
- case ID_GRID_32: g_qeglobals.d_gridsize = 5; break;
- case ID_GRID_64: g_qeglobals.d_gridsize = 6; break;
- }
- g_qeglobals.d_gridsize = 1 << g_qeglobals.d_gridsize;
- CheckMenuItem(hMenu, LOWORD(wParam), MF_BYCOMMAND | MF_CHECKED);
- Sys_UpdateWindows (W_XY|W_Z);
- break;
- }
- //
- // texture menu
- //
- case ID_VIEW_NEAREST:
- case ID_VIEW_NEARESTMIPMAP:
- case ID_VIEW_LINEAR:
- case ID_VIEW_BILINEAR:
- case ID_VIEW_BILINEARMIPMAP:
- case ID_VIEW_TRILINEAR:
- case ID_TEXTURES_WIREFRAME:
- case ID_TEXTURES_FLATSHADE:
- Texture_SetMode (LOWORD(wParam));
- break;
- case ID_TEXTURES_SHOWINUSE:
- Sys_BeginWait ();
- Texture_ShowInuse ();
- SetInspectorMode(W_TEXTURE);
- break;
- case ID_TEXTURES_INSPECTOR:
- DoSurface ();
- break;
- case CMD_TEXTUREWAD:
- case CMD_TEXTUREWAD+1:
- case CMD_TEXTUREWAD+2:
- case CMD_TEXTUREWAD+3:
- case CMD_TEXTUREWAD+4:
- case CMD_TEXTUREWAD+5:
- case CMD_TEXTUREWAD+6:
- case CMD_TEXTUREWAD+7:
- case CMD_TEXTUREWAD+8:
- case CMD_TEXTUREWAD+9:
- case CMD_TEXTUREWAD+10:
- case CMD_TEXTUREWAD+11:
- case CMD_TEXTUREWAD+12:
- case CMD_TEXTUREWAD+13:
- case CMD_TEXTUREWAD+14:
- case CMD_TEXTUREWAD+15:
- case CMD_TEXTUREWAD+16:
- case CMD_TEXTUREWAD+17:
- case CMD_TEXTUREWAD+18:
- case CMD_TEXTUREWAD+19:
- case CMD_TEXTUREWAD+20:
- case CMD_TEXTUREWAD+21:
- case CMD_TEXTUREWAD+22:
- case CMD_TEXTUREWAD+23:
- case CMD_TEXTUREWAD+24:
- case CMD_TEXTUREWAD+25:
- case CMD_TEXTUREWAD+26:
- case CMD_TEXTUREWAD+27:
- case CMD_TEXTUREWAD+28:
- case CMD_TEXTUREWAD+29:
- case CMD_TEXTUREWAD+30:
- case CMD_TEXTUREWAD+31:
- Sys_BeginWait ();
- Texture_ShowDirectory (LOWORD(wParam));
- SetInspectorMode(W_TEXTURE);
- break;
- //
- // bsp menu
- //
- case CMD_BSPCOMMAND:
- case CMD_BSPCOMMAND+1:
- case CMD_BSPCOMMAND+2:
- case CMD_BSPCOMMAND+3:
- case CMD_BSPCOMMAND+4:
- case CMD_BSPCOMMAND+5:
- case CMD_BSPCOMMAND+6:
- case CMD_BSPCOMMAND+7:
- case CMD_BSPCOMMAND+8:
- case CMD_BSPCOMMAND+9:
- case CMD_BSPCOMMAND+10:
- case CMD_BSPCOMMAND+11:
- case CMD_BSPCOMMAND+12:
- case CMD_BSPCOMMAND+13:
- case CMD_BSPCOMMAND+14:
- case CMD_BSPCOMMAND+15:
- case CMD_BSPCOMMAND+16:
- case CMD_BSPCOMMAND+17:
- case CMD_BSPCOMMAND+18:
- case CMD_BSPCOMMAND+19:
- case CMD_BSPCOMMAND+20:
- case CMD_BSPCOMMAND+21:
- case CMD_BSPCOMMAND+22:
- case CMD_BSPCOMMAND+23:
- case CMD_BSPCOMMAND+24:
- case CMD_BSPCOMMAND+25:
- case CMD_BSPCOMMAND+26:
- case CMD_BSPCOMMAND+27:
- case CMD_BSPCOMMAND+28:
- case CMD_BSPCOMMAND+29:
- case CMD_BSPCOMMAND+30:
- case CMD_BSPCOMMAND+31:
- {
- extern char *bsp_commands[256];
- RunBsp (bsp_commands[LOWORD(wParam-CMD_BSPCOMMAND)]);
- }
- break;
- //
- // misc menu
- //
- case ID_MISC_BENCHMARK:
- SendMessage ( g_qeglobals.d_hwndCamera,
- WM_USER+267, 0, 0);
- break;
- case ID_TEXTUREBK:
- DoColor(COLOR_TEXTUREBACK);
- Sys_UpdateWindows (W_ALL);
- break;
- case ID_MISC_SELECTENTITYCOLOR:
- {
- extern int inspector_mode;
- if ( ( inspector_mode == W_ENTITY ) && DoColor(COLOR_ENTITY) == true )
- {
- extern void AddProp( void );
- char buffer[100];
- sprintf( buffer, "%f %f %f", g_qeglobals.d_savedinfo.colors[COLOR_ENTITY][0],
- g_qeglobals.d_savedinfo.colors[COLOR_ENTITY][1],
- g_qeglobals.d_savedinfo.colors[COLOR_ENTITY][2] );
- SetWindowText( hwndEnt[EntValueField], buffer );
- SetWindowText( hwndEnt[EntKeyField], "_color" );
- AddProp();
- }
- Sys_UpdateWindows( W_ALL );
- }
- break;
- case ID_MISC_PRINTXY:
- WXY_Print();
- break;
- case ID_COLORS_XYBK:
- DoColor(COLOR_GRIDBACK);
- Sys_UpdateWindows (W_ALL);
- break;
- case ID_COLORS_MAJOR:
- DoColor(COLOR_GRIDMAJOR);
- Sys_UpdateWindows (W_ALL);
- break;
- case ID_COLORS_MINOR:
- DoColor(COLOR_GRIDMINOR);
- Sys_UpdateWindows (W_ALL);
- break;
- case ID_MISC_GAMMA:
- DoGamma();
- break;
- case ID_MISC_FINDBRUSH:
- DoFind();
- break;
- case ID_MISC_NEXTLEAKSPOT:
- Pointfile_Next();
- break;
- case ID_MISC_PREVIOUSLEAKSPOT:
- Pointfile_Prev();
- break;
- //
- // brush menu
- //
- case ID_BRUSH_3SIDED:
- Brush_MakeSided (3);
- break;
- case ID_BRUSH_4SIDED:
- Brush_MakeSided (4);
- break;
- case ID_BRUSH_5SIDED:
- Brush_MakeSided (5);
- break;
- case ID_BRUSH_6SIDED:
- Brush_MakeSided (6);
- break;
- case ID_BRUSH_7SIDED:
- Brush_MakeSided (7);
- break;
- case ID_BRUSH_8SIDED:
- Brush_MakeSided (8);
- break;
- case ID_BRUSH_9SIDED:
- Brush_MakeSided (9);
- break;
- case ID_BRUSH_ARBITRARYSIDED:
- DoSides ();
- break;
- //
- // select menu
- //
- case ID_BRUSH_FLIPX:
- Select_FlipAxis (0);
- break;
- case ID_BRUSH_FLIPY:
- Select_FlipAxis (1);
- break;
- case ID_BRUSH_FLIPZ:
- Select_FlipAxis (2);
- break;
- case ID_BRUSH_ROTATEX:
- Select_RotateAxis (0, 90);
- break;
- case ID_BRUSH_ROTATEY:
- Select_RotateAxis (1, 90);
- break;
- case ID_BRUSH_ROTATEZ:
- Select_RotateAxis (2, 90);
- break;
- case ID_SELECTION_ARBITRARYROTATION:
- DoRotate ();
- break;
- case ID_SELECTION_UNGROUPENTITY:
- Select_Ungroup ();
- break;
- case ID_SELECTION_CONNECT:
- ConnectEntities ();
- break;
- case ID_SELECTION_DRAGVERTECIES:
- if (g_qeglobals.d_select_mode == sel_vertex)
- {
- g_qeglobals.d_select_mode = sel_brush;
- Sys_UpdateWindows (W_ALL);
- }
- else
- {
- SetupVertexSelection ();
- if (g_qeglobals.d_numpoints)
- g_qeglobals.d_select_mode = sel_vertex;
- }
- break;
- case ID_SELECTION_DRAGEDGES:
- if (g_qeglobals.d_select_mode == sel_edge)
- {
- g_qeglobals.d_select_mode = sel_brush;
- Sys_UpdateWindows (W_ALL);
- }
- else
- {
- SetupVertexSelection ();
- if (g_qeglobals.d_numpoints)
- g_qeglobals.d_select_mode = sel_edge;
- }
- break;
- case ID_SELECTION_SELECTPARTIALTALL:
- Select_PartialTall ();
- break;
- case ID_SELECTION_SELECTCOMPLETETALL:
- Select_CompleteTall ();
- break;
- case ID_SELECTION_SELECTTOUCHING:
- Select_Touching ();
- break;
- case ID_SELECTION_SELECTINSIDE:
- Select_Inside ();
- break;
- case ID_SELECTION_CSGSUBTRACT:
- CSG_Subtract ();
- break;
- case ID_SELECTION_MAKEHOLLOW:
- CSG_MakeHollow ();
- break;
- case ID_SELECTION_CLONE:
- Select_Clone ();
- break;
- case ID_SELECTION_DELETE:
- Select_Delete ();
- break;
- case ID_SELECTION_DESELECT:
- Select_Deselect ();
- break;
- case ID_SELECTION_MAKE_DETAIL:
- Select_MakeDetail ();
- break;
- case ID_SELECTION_MAKE_STRUCTURAL:
- Select_MakeStructural ();
- break;
- //
- // region menu
- //
- case ID_REGION_OFF:
- Map_RegionOff ();
- break;
- case ID_REGION_SETXY:
- Map_RegionXY ();
- break;
- case ID_REGION_SETTALLBRUSH:
- Map_RegionTallBrush ();
- break;
- case ID_REGION_SETBRUSH:
- Map_RegionBrush ();
- break;
- case ID_REGION_SETSELECTION:
- Map_RegionSelectedBrushes ();
- break;
- case IDMRU+1:
- case IDMRU+2:
- case IDMRU+3:
- case IDMRU+4:
- case IDMRU+5:
- case IDMRU+6:
- case IDMRU+7:
- case IDMRU+8:
- case IDMRU+9:
- DoMru(hWnd,LOWORD(wParam));
- break;
- //
- // help menu
- //
- case ID_HELP_ABOUT:
- DoAbout();
- break;
- default:
- return FALSE;
- }
- return TRUE;
- }
- /*
- ============
- WMAIN_WndProc
- ============
- */
- LONG WINAPI WMAIN_WndProc (
- HWND hWnd,
- UINT uMsg,
- WPARAM wParam,
- LPARAM lParam)
- {
- LONG lRet = 1;
- RECT rect;
- HDC maindc;
- GetClientRect(hWnd, &rect);
- switch (uMsg)
- {
- case WM_TIMER:
- QE_CountBrushesAndUpdateStatusBar();
- QE_CheckAutoSave();
- return 0;
- case WM_DESTROY:
- SaveMruInReg(g_qeglobals.d_lpMruMenu,"Software\\id\\QuakeEd4\\MRU");
- DeleteMruMenu(g_qeglobals.d_lpMruMenu);
- PostQuitMessage(0);
- KillTimer( hWnd, QE_TIMER0 );
- return 0;
- case WM_CREATE:
- maindc = GetDC(hWnd);
- // QEW_SetupPixelFormat(maindc, false);
- g_qeglobals.d_lpMruMenu = CreateMruMenuDefault();
- LoadMruInReg(g_qeglobals.d_lpMruMenu,"Software\\id\\QuakeEd4\\MRU");
- // Refresh the File menu.
- PlaceMenuMRUItem(g_qeglobals.d_lpMruMenu,GetSubMenu(GetMenu(hWnd),0),
- ID_FILE_EXIT);
- return 0;
- case WM_SIZE:
- // resize the status window
- MoveWindow( g_qeglobals.d_hwndStatus, -100, 100, 10, 10, true);
- return 0;
- case WM_KEYDOWN:
- return QE_KeyDown (wParam);
- case WM_CLOSE:
- /* call destroy window to cleanup and go away */
- SaveWindowState(g_qeglobals.d_hwndXY, "xywindow");
- SaveWindowState(g_qeglobals.d_hwndCamera, "camerawindow");
- SaveWindowState(g_qeglobals.d_hwndZ, "zwindow");
- SaveWindowState(g_qeglobals.d_hwndEntity, "EntityWindow");
- SaveWindowState(g_qeglobals.d_hwndMain, "mainwindow");
- // FIXME: is this right?
- SaveRegistryInfo("SavedInfo", &g_qeglobals.d_savedinfo, sizeof(g_qeglobals.d_savedinfo));
- DestroyWindow (hWnd);
- return 0;
- case WM_COMMAND:
- return CommandHandler (hWnd, wParam, lParam);
- return 0;
- }
- return DefWindowProc (hWnd, uMsg, wParam, lParam);
- }
- /*
- ==============
- Main_Create
- ==============
- */
- void Main_Create (HINSTANCE hInstance)
- {
- WNDCLASS wc;
- int i;
- HMENU hMenu;
- /* Register the camera class */
- memset (&wc, 0, sizeof(wc));
- wc.style = 0;
- wc.lpfnWndProc = (WNDPROC)WMAIN_WndProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hInstance;
- wc.hIcon = 0;
- wc.hCursor = LoadCursor (NULL,IDC_ARROW);
- wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
- wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
- wc.lpszClassName = "QUAKE_MAIN";
- if (!RegisterClass (&wc) )
- Error ("WCam_Register: failed");
- g_qeglobals.d_hwndMain = CreateWindow ("QUAKE_MAIN" ,
- "QuakeEd 3",
- WS_OVERLAPPEDWINDOW |
- WS_CLIPSIBLINGS |
- WS_CLIPCHILDREN,
- 0,0,screen_width,screen_height+GetSystemMetrics(SM_CYSIZE), // size
- 0,
- 0, // no menu
- hInstance,
- NULL);
- if (!g_qeglobals.d_hwndMain)
- Error ("Couldn't create main window");
- /* create a timer so that we can count brushes */
- SetTimer( g_qeglobals.d_hwndMain,
- QE_TIMER0,
- 1000,
- NULL );
- LoadWindowState(g_qeglobals.d_hwndMain, "mainwindow");
- s_hwndToolbar = CreateToolBar(hInstance);
- g_qeglobals.d_hwndStatus = CreateMyStatusWindow(hInstance);
- //
- // load misc info from registry
- //
- i = sizeof(g_qeglobals.d_savedinfo);
- LoadRegistryInfo("SavedInfo", &g_qeglobals.d_savedinfo, &i);
- if (g_qeglobals.d_savedinfo.iSize != sizeof(g_qeglobals.d_savedinfo))
- {
- // fill in new defaults
- g_qeglobals.d_savedinfo.iSize = sizeof(g_qeglobals.d_savedinfo);
- g_qeglobals.d_savedinfo.fGamma = 1.0;
- g_qeglobals.d_savedinfo.iTexMenu = ID_VIEW_NEAREST;
- g_qeglobals.d_savedinfo.exclude = 0;
- g_qeglobals.d_savedinfo.show_coordinates = true;
- g_qeglobals.d_savedinfo.show_names = true;
- for (i=0 ; i<3 ; i++)
- {
- g_qeglobals.d_savedinfo.colors[COLOR_TEXTUREBACK][i] = 0.25;
- g_qeglobals.d_savedinfo.colors[COLOR_GRIDBACK][i] = 1.0;
- g_qeglobals.d_savedinfo.colors[COLOR_GRIDMINOR][i] = 0.75;
- g_qeglobals.d_savedinfo.colors[COLOR_GRIDMAJOR][i] = 0.5;
- g_qeglobals.d_savedinfo.colors[COLOR_CAMERABACK][i] = 0.25;
- }
- }
- if ( ( hMenu = GetMenu( g_qeglobals.d_hwndMain ) ) != 0 )
- {
- /*
- ** by default all of these are checked because that's how they're defined in the menu editor
- */
- if ( !g_qeglobals.d_savedinfo.show_names )
- CheckMenuItem( hMenu, ID_VIEW_SHOWNAMES, MF_BYCOMMAND | MF_UNCHECKED );
- if ( !g_qeglobals.d_savedinfo.show_coordinates )
- CheckMenuItem( hMenu, ID_VIEW_SHOWCOORDINATES, MF_BYCOMMAND | MF_UNCHECKED );
- if ( g_qeglobals.d_savedinfo.exclude & EXCLUDE_LIGHTS )
- CheckMenuItem( hMenu, ID_VIEW_SHOWLIGHTS, MF_BYCOMMAND | MF_UNCHECKED );
- if ( g_qeglobals.d_savedinfo.exclude & EXCLUDE_ENT )
- CheckMenuItem( hMenu, ID_VIEW_ENTITY, MF_BYCOMMAND | MF_UNCHECKED );
- if ( g_qeglobals.d_savedinfo.exclude & EXCLUDE_PATHS )
- CheckMenuItem( hMenu, ID_VIEW_SHOWPATH, MF_BYCOMMAND | MF_UNCHECKED );
- if ( g_qeglobals.d_savedinfo.exclude & EXCLUDE_WATER )
- CheckMenuItem( hMenu, ID_VIEW_SHOWWATER, MF_BYCOMMAND | MF_UNCHECKED );
- if ( g_qeglobals.d_savedinfo.exclude & EXCLUDE_WORLD )
- CheckMenuItem( hMenu, ID_VIEW_SHOWWORLD, MF_BYCOMMAND | MF_UNCHECKED );
- if ( g_qeglobals.d_savedinfo.exclude & EXCLUDE_CLIP )
- CheckMenuItem( hMenu, ID_VIEW_SHOWCLIP, MF_BYCOMMAND | MF_UNCHECKED );
- }
- ShowWindow (g_qeglobals.d_hwndMain, SW_SHOWDEFAULT);
- }
- /*
- =============================================================
- REGISTRY INFO
- =============================================================
- */
- BOOL SaveRegistryInfo(const char *pszName, void *pvBuf, long lSize)
- {
- LONG lres;
- DWORD dwDisp;
- HKEY hKeyId;
- lres = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\id\\QuakeEd4", 0, NULL,
- REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKeyId, &dwDisp);
- if (lres != ERROR_SUCCESS)
- return FALSE;
- lres = RegSetValueEx(hKeyId, pszName, 0, REG_BINARY, pvBuf, lSize);
- RegCloseKey(hKeyId);
- if (lres != ERROR_SUCCESS)
- return FALSE;
- return TRUE;
- }
- BOOL LoadRegistryInfo(const char *pszName, void *pvBuf, long *plSize)
- {
- HKEY hKey;
- long lres, lType, lSize;
- if (plSize == NULL)
- plSize = &lSize;
- lres = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\id\\QuakeEd4", 0, KEY_READ, &hKey);
- if (lres != ERROR_SUCCESS)
- return FALSE;
- lres = RegQueryValueEx(hKey, pszName, NULL, &lType, pvBuf, plSize);
- RegCloseKey(hKey);
- if (lres != ERROR_SUCCESS)
- return FALSE;
- return TRUE;
- }
- BOOL SaveWindowState(HWND hWnd, const char *pszName)
- {
- RECT rc;
- GetWindowRect(hWnd, &rc);
- if (hWnd != g_qeglobals.d_hwndMain)
- MapWindowPoints(NULL, g_qeglobals.d_hwndMain, (POINT *)&rc, 2);
- return SaveRegistryInfo(pszName, &rc, sizeof(rc));
- }
- BOOL LoadWindowState(HWND hWnd, const char *pszName)
- {
- RECT rc;
- LONG lSize = sizeof(rc);
- if (LoadRegistryInfo(pszName, &rc, &lSize))
- {
- if (rc.left < 0)
- rc.left = 0;
- if (rc.top < 0)
- rc.top = 0;
- if (rc.right < rc.left + 16)
- rc.right = rc.left + 16;
- if (rc.bottom < rc.top + 16)
- rc.bottom = rc.top + 16;
- MoveWindow(hWnd, rc.left, rc.top, rc.right - rc.left,
- rc.bottom - rc.top, FALSE);
- return TRUE;
- }
- return FALSE;
- }
- /*
- ===============================================================
- STATUS WINDOW
- ===============================================================
- */
- void Sys_UpdateStatusBar( void )
- {
- extern int g_numbrushes, g_numentities;
- char numbrushbuffer[100]="";
- sprintf( numbrushbuffer, "Brushes: %d Entities: %d", g_numbrushes, g_numentities );
- Sys_Status( numbrushbuffer, 2 );
- }
- void Sys_Status(const char *psz, int part )
- {
- SendMessage(g_qeglobals.d_hwndStatus, SB_SETTEXT, part, (LPARAM)psz);
- }
- static HWND CreateMyStatusWindow(HINSTANCE hInst)
- {
- HWND hWnd;
- int partsize[3] = { 300, 1100, -1 };
- hWnd = CreateWindowEx( WS_EX_TOPMOST, // no extended styles
- STATUSCLASSNAME, // status bar
- "", // no text
- WS_CHILD | WS_BORDER | WS_VISIBLE, // styles
- -100, -100, 10, 10, // x, y, cx, cy
- g_qeglobals.d_hwndMain, // parent window
- (HMENU)100, // window ID
- hInst, // instance
- NULL); // window data
- SendMessage( hWnd, SB_SETPARTS, 3, ( long ) partsize );
- return hWnd;
- }
- //==============================================================
- #define NUMBUTTONS 15
- HWND CreateToolBar(HINSTANCE hinst)
- {
- HWND hwndTB;
- TBADDBITMAP tbab;
- TBBUTTON tbb[NUMBUTTONS];
- // Ensure that the common control DLL is loaded.
- InitCommonControls();
- // Create a toolbar that the user can customize and that has a
- // tooltip associated with it.
- hwndTB = CreateWindowEx(0, TOOLBARCLASSNAME, (LPSTR) NULL,
- WS_CHILD | TBSTYLE_TOOLTIPS | CCS_ADJUSTABLE | WS_BORDER,
- 0, 0, 0, 0, g_qeglobals.d_hwndMain, (HMENU) IDR_TOOLBAR1, hinst, NULL);
- // Send the TB_BUTTONSTRUCTSIZE message, which is required for
- // backward compatibility.
- SendMessage(hwndTB, TB_BUTTONSTRUCTSIZE, (WPARAM) sizeof(TBBUTTON), 0);
- // Add the bitmap containing button images to the toolbar.
- tbab.hInst = hinst;
- tbab.nID = IDR_TOOLBAR1;
- SendMessage(hwndTB, TB_ADDBITMAP, (WPARAM)NUMBUTTONS, (WPARAM) &tbab);
- // Fill the TBBUTTON array with button information, and add the
- // buttons to the toolbar.
- tbb[0].iBitmap = 0;
- tbb[0].idCommand = ID_BRUSH_FLIPX;
- tbb[0].fsState = TBSTATE_ENABLED;
- tbb[0].fsStyle = TBSTYLE_BUTTON;
- tbb[0].dwData = 0;
- tbb[0].iString = 0;
- tbb[1].iBitmap = 2;
- tbb[1].idCommand = ID_BRUSH_FLIPY;
- tbb[1].fsState = TBSTATE_ENABLED;
- tbb[1].fsStyle = TBSTYLE_BUTTON;
- tbb[1].dwData = 0;
- tbb[1].iString = 0;
- tbb[2].iBitmap = 4;
- tbb[2].idCommand = ID_BRUSH_FLIPZ;
- tbb[2].fsState = TBSTATE_ENABLED;
- tbb[2].fsStyle = TBSTYLE_BUTTON;
- tbb[2].dwData = 0;
- tbb[2].iString = 0;
- tbb[3].iBitmap = 1;
- tbb[3].idCommand = ID_BRUSH_ROTATEX;
- tbb[3].fsState = TBSTATE_ENABLED;
- tbb[3].fsStyle = TBSTYLE_BUTTON;
- tbb[3].dwData = 0;
- tbb[3].iString = 0;
- tbb[4].iBitmap = 3;
- tbb[4].idCommand = ID_BRUSH_ROTATEY;
- tbb[4].fsState = TBSTATE_ENABLED;
- tbb[4].fsStyle = TBSTYLE_BUTTON;
- tbb[4].dwData = 0;
- tbb[4].iString = 0;
- tbb[5].iBitmap = 5;
- tbb[5].idCommand = ID_BRUSH_ROTATEZ;
- tbb[5].fsState = TBSTATE_ENABLED;
- tbb[5].fsStyle = TBSTYLE_BUTTON;
- tbb[5].dwData = 0;
- tbb[5].iString = 0;
- tbb[6].iBitmap = 6;
- tbb[6].idCommand = ID_SELECTION_SELECTCOMPLETETALL;
- tbb[6].fsState = TBSTATE_ENABLED;
- tbb[6].fsStyle = TBSTYLE_BUTTON;
- tbb[6].dwData = 0;
- tbb[6].iString = 0;
- tbb[7].iBitmap = 7;
- tbb[7].idCommand = ID_SELECTION_SELECTTOUCHING;
- tbb[7].fsState = TBSTATE_ENABLED;
- tbb[7].fsStyle = TBSTYLE_BUTTON;
- tbb[7].dwData = 0;
- tbb[7].iString = 0;
- tbb[8].iBitmap = 8;
- tbb[8].idCommand = ID_SELECTION_SELECTPARTIALTALL;
- tbb[8].fsState = TBSTATE_ENABLED;
- tbb[8].fsStyle = TBSTYLE_BUTTON;
- tbb[8].dwData = 0;
- tbb[8].iString = 0;
- tbb[9].iBitmap = 9;
- tbb[9].idCommand = ID_SELECTION_SELECTINSIDE;
- tbb[9].fsState = TBSTATE_ENABLED;
- tbb[9].fsStyle = TBSTYLE_BUTTON;
- tbb[9].dwData = 0;
- tbb[9].iString = 0;
- tbb[10].iBitmap = 10;
- tbb[10].idCommand = ID_SELECTION_CSGSUBTRACT;
- tbb[10].fsState = TBSTATE_ENABLED;
- tbb[10].fsStyle = TBSTYLE_BUTTON;
- tbb[10].dwData = 0;
- tbb[10].iString = 0;
- tbb[11].iBitmap = 11;
- tbb[11].idCommand = ID_SELECTION_MAKEHOLLOW;
- tbb[11].fsState = TBSTATE_ENABLED;
- tbb[11].fsStyle = TBSTYLE_BUTTON;
- tbb[11].dwData = 0;
- tbb[11].iString = 0;
- tbb[12].iBitmap = 12;
- tbb[12].idCommand = ID_TEXTURES_WIREFRAME;
- tbb[12].fsState = TBSTATE_ENABLED;
- tbb[12].fsStyle = TBSTYLE_BUTTON;
- tbb[12].dwData = 0;
- tbb[12].iString = 0;
- tbb[13].iBitmap = 13;
- tbb[13].idCommand = ID_TEXTURES_FLATSHADE;
- tbb[13].fsState = TBSTATE_ENABLED;
- tbb[13].fsStyle = TBSTYLE_BUTTON;
- tbb[13].dwData = 0;
- tbb[13].iString = 0;
- tbb[14].iBitmap = 14;
- tbb[14].idCommand = ID_VIEW_TRILINEAR;
- tbb[14].fsState = TBSTATE_ENABLED;
- tbb[14].fsStyle = TBSTYLE_BUTTON;
- tbb[14].dwData = 0;
- tbb[14].iString = 0;
- SendMessage(hwndTB, TB_ADDBUTTONS, (WPARAM)NUMBUTTONS,
- (LPARAM) (LPTBBUTTON) &tbb);
- ShowWindow(hwndTB, SW_SHOW);
- return hwndTB;
- }
|