CFileDialog nur alter Style?
-
]diesen define hab ich selbst auch schon vor dem include gesetzt ... hat aber nix gebracht.
Solange der Code, der die Struktur tatsächlich verwendet, ohne dieses define compilert wurde, kann das auch nichts bringen.
-
jo, stimmt ...
-
Falls es nicht schon gesagt wurde:
Das kommt daher das CFileDialog das Flag OFN_ENABLEHOOK nutzt.
Also mit CFileDialog wird es denke ich mal nicht gehen.
Ich würde einfach GetOpenFileName nehmen. Das Problem ist halt das man den Dialog dann schlecht zentrieren kann.
-
Das wäre noch möglich:
Zwar nicht perfekt, aber...namespace FileDlg { HHOOK hook; LRESULT CALLBACK CallWndRetProc(int nCode,WPARAM wParam,LPARAM lParam) { if(nCode >= 0) { CWPRETSTRUCT* ret = reinterpret_cast<CWPRETSTRUCT*> (lParam); if(ret->message == WM_CREATE) { CWnd::FromHandle(ret->hwnd)->CenterWindow(); UnhookWindowsHookEx(hook); return 0; } } return CallNextHookEx(hook,nCode,wParam,lParam); } CString Open(bool openFileDlg,LPCTSTR filename = 0,LPCTSTR filter = 0,LPCTSTR defExt = 0,DWORD flags = OFN_EXPLORER | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,CWnd* parent = 0) { if(parent == 0) parent = CWnd::GetFocus(); hook = SetWindowsHookEx(WH_CALLWNDPROCRET,CallWndRetProc,0,GetWindowThreadProcessId(parent->GetSafeHwnd(),0)); CString fn(filename); OPENFILENAME ofn; ZeroMemory(&ofn,sizeof ofn); ofn.lStructSize = sizeof ofn; ofn.Flags = flags; ofn.hwndOwner = parent->GetSafeHwnd(); ofn.hInstance = AfxGetInstanceHandle(); ofn.lpstrFile = fn.GetBuffer(FILENAME_MAX); ofn.nMaxFile = FILENAME_MAX; ofn.lpstrFilter = filter; (openFileDlg) ? GetOpenFileName(&ofn) : GetSaveFileName(&ofn); fn.ReleaseBuffer(); return fn; } };
-
Ui, da hat sich aber jemand Mühe gemacht
-
Schreib doch wenigstens dazu ob du es gebrauchen kannst.
-
dEus:
Addy steht im Modforum
-
Hi!
Ich hab da immer eine bin Datei. Die fügt man in einfach die Ressource ein. Die setzt das ganze Programm in den XP Style.mfg mike
-
XP-Style != das was ich will ...
-
Hoppla
Naja. Dann leite die CFileDialog einfach ab, erzeuge einen leeren Dialog, gib ein Static Feld rein und du kannst den CFileDialog beliebig modifiezieren.
Mit anderen Worten:
Erstell einen Dialog, leite eine CDialog Klasse ab, ändere die abgeleitete Klasse nach CFileDialog und ersetzte ALLE CDialog nach CFileDialog. Aber nur in der .h !!!!! Erstell einen Staticrahmen und gib ihm die ID str32=0x045f - Titel bleibt leer.
Ändere den konstruktor
CMyFileDIALOG(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDREADONLY| OFN_OVERWRITEPROMT,LPCTSTR lpszFilter=NULL,CWnd pParentWnd = NULL);Weiters:
CMyDialog::CMyDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName, DWORD dwFlags,LPCTSTR lpszFilter,CWnd* pParentWnd = NULL)
:CfileDialog(bOpenFileDialog, lpszDefExt,lpszFileName,dwFlags,lpszFilter,pParentWnd)
{
m_ofn.Flags = OFN_ENABLETEMPLATE;
ofn.lpTemplateName = MAKEINTERNRESSOURCE(IDD_MYFILEDIALOG);
ofn.lpstrTitle = "Mein Filedialog";
m_bDeleteAll = FALSE;
}Zugriff: GetParent()->GetDlgItem(...)->
Dateiname: GetParentItem(0x480)->GetWindowText(m_strFileName);
GetParent()->SensMessage(WM_COMMAND,IDCANCEL);Aufruf: CMyFileDialog dlg(TRUE,NULL,"*dat");
mfg mike