|
|
/**************************************************/ /* */ /* */ /* 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
|