📄 filedlg16.c
字号:
/************************************************************************
* FD16_Destroy [internal]
* called from the common 16/32 code to cleanup 32 bit data
*/
static void CALLBACK FD16_Destroy(const FD31_DATA *lfs)
{
PFD16_PRIVATE priv = (PFD16_PRIVATE) lfs->private1632;
/* free resources for a 16 bits dialog */
if (NULL != priv)
{
if (priv->hResource16) FreeResource16(priv->hResource16);
if (priv->hGlobal16)
{
GlobalUnlock16(priv->hGlobal16);
GlobalFree16(priv->hGlobal16);
}
FD31_FreeOfnW(lfs->ofnW);
HeapFree(GetProcessHeap(), 0, lfs->ofnW);
}
}
static void FD16_SetupCallbacks(PFD31_CALLBACKS callbacks)
{
callbacks->Init = FD16_Init;
callbacks->CWP = FD16_CallWindowProc;
callbacks->UpdateResult = FD16_UpdateResult;
callbacks->UpdateFileTitle = FD16_UpdateFileTitle;
callbacks->SendLbGetCurSel = FD16_SendLbGetCurSel;
callbacks->Destroy = FD16_Destroy;
}
/***********************************************************************
* FD16_MapDrawItemStruct [internal]
* map a 16 bits drawitem struct to 32
*/
static void FD16_MapDrawItemStruct(const DRAWITEMSTRUCT16 *lpdis16, LPDRAWITEMSTRUCT lpdis)
{
lpdis->CtlType = lpdis16->CtlType;
lpdis->CtlID = lpdis16->CtlID;
lpdis->itemID = lpdis16->itemID;
lpdis->itemAction = lpdis16->itemAction;
lpdis->itemState = lpdis16->itemState;
lpdis->hwndItem = HWND_32(lpdis16->hwndItem);
lpdis->hDC = HDC_32(lpdis16->hDC);
lpdis->rcItem.right = lpdis16->rcItem.right;
lpdis->rcItem.left = lpdis16->rcItem.left;
lpdis->rcItem.top = lpdis16->rcItem.top;
lpdis->rcItem.bottom = lpdis16->rcItem.bottom;
lpdis->itemData = lpdis16->itemData;
}
/***********************************************************************
* FD16_WMMeasureItem16 [internal]
*/
static LONG FD16_WMMeasureItem(HWND16 hWnd, WPARAM16 wParam, LPARAM lParam)
{
LPMEASUREITEMSTRUCT16 lpmeasure;
lpmeasure = MapSL(lParam);
lpmeasure->itemHeight = FD31_GetFldrHeight();
return TRUE;
}
/* ------------------ Dialog procedures ---------------------- */
/***********************************************************************
* FileOpenDlgProc (COMMDLG.6)
*/
BOOL16 CALLBACK FileOpenDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam)
{
HWND hWnd = HWND_32(hWnd16);
PFD31_DATA lfs = (PFD31_DATA)GetPropA(hWnd,FD31_OFN_PROP);
DRAWITEMSTRUCT dis;
TRACE("msg=%x wparam=%x lParam=%lx\n", wMsg, wParam, lParam);
if ((wMsg != WM_INITDIALOG) && lfs && lfs->hook)
{
LRESULT lRet = (BOOL16)FD31_CallWindowProc(lfs, wMsg, wParam, lParam);
if (lRet)
return lRet; /* else continue message processing */
}
switch (wMsg)
{
case WM_INITDIALOG:
return FD31_WMInitDialog(hWnd, wParam, lParam);
case WM_MEASUREITEM:
return FD16_WMMeasureItem(hWnd16, wParam, lParam);
case WM_DRAWITEM:
FD16_MapDrawItemStruct(MapSL(lParam), &dis);
return FD31_WMDrawItem(hWnd, wParam, lParam, FALSE, &dis);
case WM_COMMAND:
return FD31_WMCommand(hWnd, lParam, HIWORD(lParam),wParam, lfs);
#if 0
case WM_CTLCOLOR:
SetBkColor((HDC16)wParam, 0x00C0C0C0);
switch (HIWORD(lParam))
{
case CTLCOLOR_BTN:
SetTextColor((HDC16)wParam, 0x00000000);
return hGRAYBrush;
case CTLCOLOR_STATIC:
SetTextColor((HDC16)wParam, 0x00000000);
return hGRAYBrush;
}
break;
#endif
}
return FALSE;
}
/***********************************************************************
* FileSaveDlgProc (COMMDLG.7)
*/
BOOL16 CALLBACK FileSaveDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam)
{
HWND hWnd = HWND_32(hWnd16);
PFD31_DATA lfs = (PFD31_DATA)GetPropA(hWnd,FD31_OFN_PROP);
DRAWITEMSTRUCT dis;
TRACE("msg=%x wparam=%x lParam=%lx\n", wMsg, wParam, lParam);
if ((wMsg != WM_INITDIALOG) && lfs && lfs->hook)
{
LRESULT lRet;
lRet = (BOOL16)FD31_CallWindowProc(lfs, wMsg, wParam, lParam);
if (lRet)
return lRet; /* else continue message processing */
}
switch (wMsg) {
case WM_INITDIALOG:
return FD31_WMInitDialog(hWnd, wParam, lParam);
case WM_MEASUREITEM:
return FD16_WMMeasureItem(hWnd16, wParam, lParam);
case WM_DRAWITEM:
FD16_MapDrawItemStruct(MapSL(lParam), &dis);
return FD31_WMDrawItem(hWnd, wParam, lParam, TRUE, &dis);
case WM_COMMAND:
return FD31_WMCommand(hWnd, lParam, HIWORD(lParam), wParam, lfs);
}
/*
case WM_CTLCOLOR:
SetBkColor((HDC16)wParam, 0x00C0C0C0);
switch (HIWORD(lParam))
{
case CTLCOLOR_BTN:
SetTextColor((HDC16)wParam, 0x00000000);
return hGRAYBrush;
case CTLCOLOR_STATIC:
SetTextColor((HDC16)wParam, 0x00000000);
return hGRAYBrush;
}
return FALSE;
*/
return FALSE;
}
/* ------------------ APIs ---------------------- */
/***********************************************************************
* GetOpenFileName (COMMDLG.1)
*
* Creates a dialog box for the user to select a file to open.
*
* RETURNS
* TRUE on success: user selected a valid file
* FALSE on cancel, error, close or filename-does-not-fit-in-buffer.
*
* BUGS
* unknown, there are some FIXME's left.
*/
BOOL16 WINAPI GetOpenFileName16(
SEGPTR ofn /* [in/out] address of structure with data*/
)
{
HINSTANCE16 hInst;
BOOL bRet = FALSE;
LPOPENFILENAME16 lpofn = MapSL(ofn);
PFD31_DATA lfs;
FARPROC16 ptr;
FD31_CALLBACKS callbacks;
PFD16_PRIVATE priv;
if (!lpofn || !FD31_Init()) return FALSE;
FD16_SetupCallbacks(&callbacks);
lfs = FD31_AllocPrivate((LPARAM) ofn, OPEN_DIALOG, &callbacks, 0);
if (lfs)
{
priv = (PFD16_PRIVATE) lfs->private1632;
hInst = GetWindowLongPtrA( HWND_32(lpofn->hwndOwner), GWLP_HINSTANCE );
ptr = GetProcAddress16(GetModuleHandle16("COMMDLG"), (LPCSTR) 6);
bRet = DialogBoxIndirectParam16( hInst, priv->hDlgTmpl16, lpofn->hwndOwner,
(DLGPROC16) ptr, (LPARAM) lfs);
FD31_DestroyPrivate(lfs);
}
TRACE("return lpstrFile='%s' !\n", (char *)MapSL(lpofn->lpstrFile));
return bRet;
}
/***********************************************************************
* GetSaveFileName (COMMDLG.2)
*
* Creates a dialog box for the user to select a file to save.
*
* RETURNS
* TRUE on success: user enters a valid file
* FALSE on cancel, error, close or filename-does-not-fit-in-buffer.
*
* BUGS
* unknown. There are some FIXME's left.
*/
BOOL16 WINAPI GetSaveFileName16(
SEGPTR ofn /* [in/out] addess of structure with data*/
)
{
HINSTANCE16 hInst;
BOOL bRet = FALSE;
LPOPENFILENAME16 lpofn = MapSL(ofn);
PFD31_DATA lfs;
FARPROC16 ptr;
FD31_CALLBACKS callbacks;
PFD16_PRIVATE priv;
if (!lpofn || !FD31_Init()) return FALSE;
FD16_SetupCallbacks(&callbacks);
lfs = FD31_AllocPrivate((LPARAM) ofn, SAVE_DIALOG, &callbacks, 0);
if (lfs)
{
priv = (PFD16_PRIVATE) lfs->private1632;
hInst = GetWindowLongPtrA( HWND_32(lpofn->hwndOwner), GWLP_HINSTANCE );
ptr = GetProcAddress16(GetModuleHandle16("COMMDLG"), (LPCSTR) 7);
bRet = DialogBoxIndirectParam16( hInst, priv->hDlgTmpl16, lpofn->hwndOwner,
(DLGPROC16) ptr, (LPARAM) lfs);
FD31_DestroyPrivate(lfs);
}
TRACE("return lpstrFile='%s' !\n", (char *)MapSL(lpofn->lpstrFile));
return bRet;
}
/***********************************************************************
* GetFileTitle (COMMDLG.27)
*/
short WINAPI GetFileTitle16(LPCSTR lpFile, LPSTR lpTitle, UINT16 cbBuf)
{
return GetFileTitleA(lpFile, lpTitle, cbBuf);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -