GfxGroupEdit.cpp
资源名称:src.zip [点击查看]
上传用户:guangzhiyw
上传日期:2007-01-09
资源大小:495k
文件大小:3k
源码类别:
ICQ/即时通讯
开发平台:
Visual C++
- // Copyright (c) Iuri Apollonio 1998
- // Use & modify as you want & need, and leave those 4 lines.
- // Strongly based on article "Inplace edit control" of Mario Contestabile and "Editable subitems" of Zafir
- // http://www.codeguru.com
- // GfxGroupEdit.cpp : implementation file
- //
- #include "stdafx.h"
- //#include "micq.h"
- #include "GfxGroupEdit.h"
- #include "GfxOutBarCtrl.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CGfxGroupEdit
- CGfxGroupEdit::CGfxGroupEdit()
- {
- bEscapeKey = FALSE;
- iIndex = -1;
- msgSend = NM_OB_ONGROUPENDEDIT;
- bNoDown = false;
- }
- CGfxGroupEdit::~CGfxGroupEdit()
- {
- }
- BEGIN_MESSAGE_MAP(CGfxGroupEdit, CEdit)
- //{{AFX_MSG_MAP(CGfxGroupEdit)
- ON_WM_KILLFOCUS()
- ON_WM_CREATE()
- ON_WM_CHAR()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CGfxGroupEdit message handlers
- void CGfxGroupEdit::OnKillFocus(CWnd* pNewWnd)
- {
- PostMessage(WM_CLOSE, 0, 0);
- if (!bEscapeKey)
- {
- GetWindowText(text);
- if (text != "") GetOwner()->SendMessage(WM_OUTBAR_NOTIFY, msgSend, (LPARAM) this);
- }
- }
- BOOL CGfxGroupEdit::PreTranslateMessage(MSG* pMsg)
- {
- if (pMsg->wParam == VK_RETURN)
- {
- PostMessage(WM_CLOSE, 0, 0);
- return TRUE;
- }
- else if (pMsg->wParam == VK_ESCAPE)
- {
- PostMessage(WM_CLOSE, 0, 0);
- return bEscapeKey = TRUE;
- }
- return CEdit::PreTranslateMessage(pMsg);
- }
- void CGfxGroupEdit::PostNcDestroy()
- {
- CEdit::PostNcDestroy();
- delete this;
- }
- int CGfxGroupEdit::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CEdit::OnCreate(lpCreateStruct) == -1)
- return -1;
- SendMessage(WM_SETFONT,(WPARAM) GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- return 0;
- }
- void CGfxGroupEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
- {
- if (msgSend == NM_OB_ONGROUPENDEDIT)
- {
- CEdit::OnChar(nChar, nRepCnt, nFlags);
- return;
- }
- if (nChar == VK_ESCAPE || nChar == VK_RETURN)
- {
- if (nChar == VK_ESCAPE) bEscapeKey = TRUE;
- GetParent()->SetFocus();
- return;
- }
- CEdit::OnChar(nChar, nRepCnt, nFlags);
- CString str;
- CRect rect, parentrect;
- GetClientRect(&rect);
- GetParent()->GetClientRect(&parentrect);
- ClientToScreen(&rect);
- GetParent()->ScreenToClient(&rect);
- GetWindowText(str);
- CWindowDC dc(this);
- CFont *pFont = GetParent()->GetFont();
- CFont *pFontDC = dc.SelectObject(pFont);
- CRect szrc(rect);
- szrc.bottom = szrc.top;
- if (bNoDown == true)
- {
- dc.DrawText(str, szrc, DT_CALCRECT);
- if (szrc.right >= parentrect.right - 1) rect.right = parentrect.right - 1;
- else rect.right = szrc.right;
- MoveWindow(&rect);
- return;
- }
- dc.DrawText(str, szrc, DT_WORDBREAK|DT_CENTER|DT_CALCRECT);
- dc.SelectObject(pFontDC);
- CSize size = szrc.Size();
- if (size.cx > rect.Width())
- {
- if (size.cx + rect.left < parentrect.right) rect.right = rect.left + size.cx;
- else rect.right = parentrect.right;
- MoveWindow(&rect);
- }
- else if (size.cy > rect.Height())
- {
- if (size.cy + rect.bottom < parentrect.bottom) rect.bottom = rect.top + size.cy;
- else rect.bottom = parentrect.bottom;
- MoveWindow(&rect);
- }
- }