Text von Dialogelementen aus Stringtable
-
Heiho
wenn ich ein dialog hab, und da zb ein text erstell - kann ich es so einstellen das der text aus der stringtable geladen wird ?
die table hab ich schon, und es waehre angenehmer wenn ich alles daraus les {hab nicht ein buchstaben hardcodet}
-
denke das geht mit
LoadString(HINSTANCE hInstance,UNIT ID,LPTSTR lpBuffer,int nMaxBufferLen);
-
ich weiss, ich hab bereits das OnInitDialog ueberschrieben und hied jedem element ein text zugewiesen
BOOL CBlaBlubb::OnInitDialog() { CDialog::OnInitDialog(); CString csText = _T(""); csText.LoadString(IDS_SHOWTITLE); this->SetWindowText(csText); csText.LoadString(IDS_SHOWCLOSE); m_Button.SetWindowText(csText); return TRUE; }nur ich find das zu aufwendig, ich war der hoffnung das ich das in den attributen machen kann ohne die loadstrings
also zb bei captions wo der anzuzeigende text steht die text id und ferdich
-
warum packst du es nicht in eine schleife??
gib den ID's in dem Stringtabel die gleichen ID's wie in der resourcen.h eigedlich dürften die doch nicht kollidierenstatic UINT MYSTRINGS [2] = {IDC_SHOWTITLE,IDC_SHOWCLOSE};//In die *.cpp auserhalb der class BOOL C...Dlg::OnInitDialog() { ........ LoadStrings(MYSTRINGS); } void C...Dlg::LoadStrings(UINT *STRINGS) { int nCount = (sizeof(STRINGS)/sizeof(STRINGS[0])); for(int nloop = 0; nloop <=nCount; nloop++) { CString csText = _T(""); csText.LoadString(STRINGS[nloop]); SetDlgItemText(STRINGS[nloop],(LPCTSTR)csText); } }gut bei SetWindowText haste verloren den must du halt einzeln setzen aber bei allen anderen ID's sollte das so funzen
-
hei coole idee - n problem is da trotzdem - und zwar hab ich in dem projekt mehere dialoge {um die 5} und die stehen ja alle in der resource.h
so oder so scheints nicht zu gehen per propertie page - schade aber was solls - danke
-
hmmm,
warum soll das nicht gehn, selbst wenn du 5 dialoge hast.must halt für jeden dialog dir ne eigene static UINT DLGSTRING zulegen und halt aufpassen das nicht 2 dialoge die selben resourcen verwenden wenn sie unterschiedliche beschriftungen haben, auch kannst du doch für jeden dialog die gleiche LoadString funktion hernemen.
NEW EDIT:
hab das grad probiert also es gibt keine probleme wenn du die ID's im Stringtabel genauso benennst wie in der resource.h. werden bei mir einbanfrei geladen und beschriftet.
-
LowFly schrieb:
void C...Dlg::LoadStrings(UINT *STRINGS) { int nCount = (sizeof(STRINGS)/sizeof(STRINGS[0]));Und wieder mal eine fehlerhafte Anwendung von sizeof(). In dieser Funktion hat der Compiler keine Ahnung mehr, wieviele Elemente dein Array hatte - der hat dort nur einen Pointer und der ist idR 4 Byte groß (egal wieviele Daten dahinterstehen).
@Mr Evil: Ich bin mir nicht ganz sicher, aber eventuell könnte dieser Artikel etwas mit deinem Problem zu tun haben.