You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
259 lines
6.5 KiB
259 lines
6.5 KiB
/**************************************************/
|
|
/* */
|
|
/* */
|
|
/* Guide Bar */
|
|
/* */
|
|
/* */
|
|
/* Copyright (c) 1997-1999 Microsoft Corporation. */
|
|
/**************************************************/
|
|
|
|
#include "stdafx.h"
|
|
#include "eudcedit.h"
|
|
#include "guidebar.h"
|
|
#include "registry.h"
|
|
#include "util.h"
|
|
#define STRSAFE_LIB
|
|
#include <strsafe.h>
|
|
|
|
|
|
|
|
#define GUIDEHIGH 50
|
|
#define COMBOWIDTH 55
|
|
#define COMBOHEIGHT 200
|
|
|
|
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
IMPLEMENT_DYNAMIC( CGuideBar, CStatusBar)
|
|
BEGIN_MESSAGE_MAP( CGuideBar, CStatusBar)
|
|
//{{AFX_MSG_MAP(CGuideBar)
|
|
ON_WM_CREATE()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/****************************************/
|
|
/* */
|
|
/* Constructor */
|
|
/* */
|
|
/****************************************/
|
|
CGuideBar::CGuideBar()
|
|
{
|
|
m_comboBoxAdded = FALSE;
|
|
}
|
|
|
|
/****************************************/
|
|
/* */
|
|
/* Destructor */
|
|
/* */
|
|
/****************************************/
|
|
CGuideBar::~CGuideBar()
|
|
{
|
|
}
|
|
|
|
/****************************************/
|
|
/* */
|
|
/* Create GuideBar */
|
|
/* */
|
|
/****************************************/
|
|
BOOL
|
|
CGuideBar::Create(
|
|
CWnd* pOwnerWnd,
|
|
UINT pID)
|
|
{
|
|
|
|
LONG lStyle;
|
|
//
|
|
// We don't want the sizegrip for this status bar because it is at
|
|
// the top of the frame. However MFC creates a sizegrip if the
|
|
// parent window has a thickframe. We temporarily turn off the bit
|
|
// to fool MFC so that SBARS_GRIPSIZE is not set.
|
|
//
|
|
lStyle = ::SetWindowLong(pOwnerWnd->GetSafeHwnd(),
|
|
GWL_STYLE,
|
|
(pOwnerWnd->GetStyle() & ~WS_THICKFRAME));
|
|
m_pOwnerWnd = pOwnerWnd;
|
|
if (!CStatusBar::Create( pOwnerWnd, WS_CHILD | WS_VISIBLE
|
|
| CBRS_TOP | CBRS_NOALIGN, AFX_IDW_STATUS_BAR))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
::SetWindowLong(pOwnerWnd->GetSafeHwnd(), GWL_STYLE, lStyle);
|
|
return TRUE;
|
|
}
|
|
|
|
int
|
|
CGuideBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
CRect rect;
|
|
TCHAR CharBuf[MAX_PATH];
|
|
UINT nID = 0;
|
|
|
|
if (CStatusBar::OnCreate(lpCreateStruct) == -1)
|
|
return -1;
|
|
|
|
if (!m_comboCharset.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP |
|
|
CBS_DROPDOWNLIST | CBS_HASSTRINGS, rect, this, IDC_SELECTCHARSET)){
|
|
return -1;
|
|
}
|
|
|
|
m_comboCharset.SendMessage(WM_SETFONT, (WPARAM) CStatusBar::GetFont()->GetSafeHandle());
|
|
|
|
|
|
switch (CountryInfo.LangID){
|
|
case EUDC_JPN:
|
|
nID=IDS_SHIFTJIS;
|
|
break;
|
|
case EUDC_CHS:
|
|
nID=IDS_GB2312;
|
|
break;
|
|
case EUDC_KRW:
|
|
nID=IDS_HANGUL;
|
|
break;
|
|
case EUDC_CHT:
|
|
nID=IDS_CHINESEBIG5;
|
|
break;
|
|
}
|
|
|
|
if (nID){
|
|
GetStringRes(CharBuf, nID, ARRAYLEN(CharBuf));
|
|
m_comboCharset.AddString(CharBuf);
|
|
}
|
|
|
|
GetStringRes(CharBuf, IDS_UNICODE, ARRAYLEN(CharBuf));
|
|
m_comboCharset.AddString(CharBuf);
|
|
m_comboCharset.SetCurSel(0);
|
|
return TRUE;
|
|
}
|
|
|
|
/****************************************/
|
|
/* */
|
|
/* MESSAGE "WM_PAINT" */
|
|
/* */
|
|
/****************************************/
|
|
void
|
|
CGuideBar::PositionStatusPane()
|
|
{
|
|
|
|
TCHAR CharBuf[MAX_PATH], BufTmp[MAX_PATH], *FilePtr;
|
|
int nWidth;
|
|
UINT nStyle, nID;
|
|
CRect rect;
|
|
CSize StringSize;
|
|
HRESULT hresult;
|
|
|
|
|
|
GetPaneInfo(0,nID,nStyle,nWidth);
|
|
CDC* dc = this->GetDC();
|
|
int nComboWidth;
|
|
int nDlgBaseUnitX = LOWORD(GetDialogBaseUnits());
|
|
nComboWidth = (nDlgBaseUnitX * COMBOWIDTH + 2) /4;
|
|
|
|
if (!m_comboBoxAdded)
|
|
{
|
|
SetPaneInfo(0,nID, nStyle | SBPS_NOBORDERS,nWidth+nComboWidth);
|
|
m_comboCharset.SetWindowPos( NULL, nWidth+nDlgBaseUnitX, 0,
|
|
nComboWidth, COMBOHEIGHT, SWP_NOZORDER);
|
|
m_comboBoxAdded = TRUE;
|
|
}
|
|
|
|
|
|
// Draw "Code:"
|
|
if( SelectEUDC.m_Code[0] != '\0'){
|
|
GetStringRes(CharBuf, IDS_CODE_STR, ARRAYLEN(CharBuf));
|
|
//*STRSAFE* lstrcat( CharBuf, TEXT(" "));
|
|
hresult = StringCchCat(CharBuf , ARRAYLEN(CharBuf), TEXT(" "));
|
|
if (!SUCCEEDED(hresult))
|
|
{
|
|
goto RET; ;
|
|
}
|
|
//*STRSAFE* lstrcat( CharBuf, SelectEUDC.m_Code);
|
|
hresult = StringCchCat(CharBuf , ARRAYLEN(CharBuf), SelectEUDC.m_Code);
|
|
if (!SUCCEEDED(hresult))
|
|
{
|
|
goto RET;;
|
|
}
|
|
SetPaneText (1, CharBuf, TRUE);
|
|
StringSize = dc->GetTextExtent(CharBuf,lstrlen(CharBuf));
|
|
GetPaneInfo(1,nID,nStyle,nWidth);
|
|
SetPaneInfo(1,nID,nStyle,StringSize.cx + 3*nDlgBaseUnitX);
|
|
}
|
|
if( SelectEUDC.m_Font[0] != '\0'){
|
|
GetStringRes(CharBuf, IDS_FONT_STR, ARRAYLEN(CharBuf));
|
|
//*STRSAFE* lstrcat( CharBuf, TEXT(" "));
|
|
hresult = StringCchCat(CharBuf , ARRAYLEN(CharBuf), TEXT(" "));
|
|
if (!SUCCEEDED(hresult))
|
|
{
|
|
goto RET; ;
|
|
}
|
|
//*STRSAFE* lstrcat( CharBuf, SelectEUDC.m_Font);
|
|
hresult = StringCchCat(CharBuf , ARRAYLEN(CharBuf), SelectEUDC.m_Font);
|
|
if (!SUCCEEDED(hresult))
|
|
{
|
|
goto RET; ;
|
|
}
|
|
SetPaneText (2, CharBuf, TRUE);
|
|
StringSize = dc->GetTextExtent(CharBuf,lstrlen(CharBuf));
|
|
GetPaneInfo(2,nID,nStyle,nWidth);
|
|
SetPaneInfo(2,nID,nStyle,StringSize.cx + 3*nDlgBaseUnitX);
|
|
}
|
|
|
|
|
|
if( SelectEUDC.m_Font[0] != TEXT('\0') && InqTypeFace(SelectEUDC.m_Font,
|
|
SelectEUDC.m_File, sizeof( SelectEUDC.m_File)/sizeof(TCHAR))){
|
|
GetStringRes(CharBuf, IDS_FILE_STR, ARRAYLEN(CharBuf));
|
|
//*STRSAFE* lstrcat( CharBuf, TEXT(" "));
|
|
hresult = StringCchCat(CharBuf , ARRAYLEN(CharBuf), TEXT(" "));
|
|
if (!SUCCEEDED(hresult))
|
|
{
|
|
goto RET; ;
|
|
}
|
|
//*STRSAFE* lstrcpy( BufTmp, SelectEUDC.m_FileTitle);
|
|
hresult = StringCchCopy(BufTmp , ARRAYLEN(BufTmp), SelectEUDC.m_FileTitle);
|
|
if (!SUCCEEDED(hresult))
|
|
{
|
|
goto RET; ;
|
|
}
|
|
if(( FilePtr = Mytcsrchr( BufTmp, '.')) != NULL)
|
|
*FilePtr = '\0';
|
|
if( lstrlen((const TCHAR *)BufTmp) > 20){
|
|
BufTmp[20] = '\0';
|
|
//*STRSAFE* lstrcat(BufTmp, TEXT(".."));
|
|
hresult = StringCchCat(BufTmp , ARRAYLEN(BufTmp), TEXT(".."));
|
|
if (!SUCCEEDED(hresult))
|
|
{
|
|
goto RET;
|
|
}
|
|
}
|
|
//*STRSAFE* lstrcat( CharBuf, BufTmp);
|
|
hresult = StringCchCat(CharBuf , ARRAYLEN(CharBuf), BufTmp);
|
|
if (!SUCCEEDED(hresult))
|
|
{
|
|
goto RET;
|
|
}
|
|
SetPaneText (3, CharBuf, TRUE);
|
|
StringSize = dc->GetTextExtent(CharBuf,lstrlen(CharBuf));
|
|
GetPaneInfo(3,nID,nStyle,nWidth);
|
|
SetPaneInfo(3,nID,nStyle,StringSize.cx + 3*nDlgBaseUnitX);
|
|
}
|
|
RET:
|
|
UpdateWindow();
|
|
this->ReleaseDC(dc);
|
|
|
|
}
|
|
|
|
|
|
#ifdef _DEBUG
|
|
void CGuideBar::AssertValid() const
|
|
{
|
|
CStatusBar::AssertValid();
|
|
}
|
|
void CGuideBar::Dump(CDumpContext& dc) const
|
|
{
|
|
CStatusBar::Dump(dc);
|
|
}
|
|
#endif //_DEBUG
|