/* FinalSun/FinalAlert 2 Mission Editor Copyright (C) 1999-2024 Electronic Arts, Inc. Authored by Matthias Wagner This program 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 3 of the License, or (at your option) any later version. This program 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 this program. If not, see . */ // RTPDlg.cpp: Implementierungsdatei // #include "stdafx.h" #include "finalsun.h" #include "RTPDlg.h" #include "variables.h" #include "functions.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // Dialogfeld CRTPDlg CRTPDlg::CRTPDlg(CWnd* pParent /*=NULL*/) : CDialog(CRTPDlg::IDD, pParent) { //{{AFX_DATA_INIT(CRTPDlg) // HINWEIS: Der Klassen-Assistent fügt hier Elementinitialisierung ein //}}AFX_DATA_INIT } void CRTPDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CRTPDlg) DDX_Control(pDX, IDC_PREVIEW, m_Preview); DDX_Control(pDX, IDC_USED, m_Used); DDX_Control(pDX, IDC_AVAIL, m_Available); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CRTPDlg, CDialog) //{{AFX_MSG_MAP(CRTPDlg) ON_BN_CLICKED(IDC_ADD, OnAdd) ON_BN_CLICKED(IDC_REMOVE, OnRemove) ON_LBN_SELCHANGE(IDC_AVAIL, OnSelchangeAvail) ON_LBN_DBLCLK(IDC_AVAIL, OnDblclkAvail) ON_LBN_SELCHANGE(IDC_USED, OnSelchangeUsed) ON_LBN_DBLCLK(IDC_USED, OnDblclkUsed) ON_WM_PAINT() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // Behandlungsroutinen für Nachrichten CRTPDlg BOOL CRTPDlg::OnInitDialog() { CDialog::OnInitDialog(); int i; for(i=0;i=0) continue; addedString=TranslateStringACP(addedString); if(unitname.Find("TREE")>=0) { if(unitname.GetLength()>0 && unitname!="VEINTREE") // out with it :-) { int TreeMin=atoi(g_data.sections[Map->GetTheater()+"Limits"].values["TreeMin"]); int TreeMax=atoi(g_data.sections[Map->GetTheater()+"Limits"].values["TreeMax"]); CString id=unitname; id.Delete(0, 4); int n=atoi(id); if(nTreeMax) continue; m_Available.AddString(unitname); } } } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben } void CRTPDlg::OnAdd() { int sel=m_Available.GetCurSel(); if(sel<0) return; CString currentname; m_Available.GetText(sel, currentname); m_Available.DeleteString(sel); m_Used.AddString(currentname); } void CRTPDlg::OnRemove() { int sel=m_Used.GetCurSel(); if(sel<0) return; CString currentname; m_Used.GetText(sel, currentname); m_Used.DeleteString(sel); m_Available.AddString(currentname); } void CRTPDlg::OnOK() { if(m_Used.GetCount()<=0) { //AfxMessageBox("Please select at least one tree","Error", MB_OK); return; } rndterrainsrc.clear(); int i; for(i=0;iGetUnitTypeID(m_LastSelected); PICDATA* p=&treeinfo[id].pic; //ovrlpics[m_currentOverlay][i]; if(p->pic==NULL) { CString type; type=m_LastSelected; if(missingimages.find(type)==missingimages.end()) { theApp.m_loading->LoadUnitGraphic(type); Map->UpdateTreeInfo(type); p=&treeinfo[id].pic; } if(p->pic==NULL) { missingimages[type]=TRUE; } } int curwidth=p->wMaxWidth; int curheight=p->wMaxHeight; BITMAPINFO biinfo; memset(&biinfo, 0, sizeof(BITMAPINFO)); biinfo.bmiHeader.biBitCount=24; biinfo.bmiHeader.biWidth=curwidth; biinfo.bmiHeader.biHeight=curheight; biinfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER); biinfo.bmiHeader.biClrUsed=0; biinfo.bmiHeader.biPlanes=1; biinfo.bmiHeader.biCompression=BI_RGB; biinfo.bmiHeader.biClrImportant=0; int pitch=curwidth*3; if(pitch==0) return; if(pitch%sizeof(DWORD)) { pitch+=sizeof(DWORD)-(curwidth*3)%sizeof(DWORD); } BYTE* colors=new(BYTE[pitch*curheight]); memset(colors, 255, pitch*(curheight)); RGBTRIPLE* pal=palIso; #ifdef NOSURFACES if(p->pal==iPalTheater) pal=palTheater; if(p->pal==iPalUnit) pal=palUnit; #endif int k,l; for(k=0;kpic)[l+k*curwidth]) { memcpy(&colors[l*3+(curheight-k-1)*pitch], &pal[((BYTE*)p->pic)[l+k*curwidth]], 3); } } } RECT pr; m_Preview.GetWindowRect(&pr); this->ScreenToClient(&pr); pr.top += 15; pr.bottom -= 5; pr.left += 5; pr.right -= 5; CBrush f; f.Attach(GetStockObject(WHITE_BRUSH)); dc.FillRect(&pr,&f); f.Detach(); auto clientDC = m_Preview.GetWindowDC(); StretchDIBits(clientDC->GetSafeHdc(), 20, 30,curwidth, curheight, 0, 0, curwidth, curheight, colors, &biinfo, DIB_RGB_COLORS, SRCCOPY); delete[] colors; // Kein Aufruf von CDialog::OnPaint() für Zeichnungsnachrichten }