描述:
各位兄台,小弟在编写一个ActiveX控件时遇到一个小问题:要求在按下Shift+Ctrl+Up时字体变小,且控件有编辑功能.
具体的实现如下:
1. 子类化EDIT类;
CTestCtrl::OnDraw(CDC* pdc,CRect& rcBounds,CRect& rcInvalid)
{
DoSubclassPaint();
//在此未加任何代码.
}
2.有关按键消息的处理如下:
CTestCtrl::OnKeyDown(...)
{
if(GetKeyState(VK_SHIFT)<0&& GetKeyState(VK_CONTROL)<0))
if (nChar==VK_UP)
{
HWND hWnd=CWnd::GetSafeHwnd();
CWnd* pWnd=CWnd::FromHandle(hWnd);
CDC* pDC=pWnd->GetDC();
//字体创建,使新创建的字体大小为原来使用的一半.
TEXTMETRIC tm;
CFont* pF />
pDC->GetTextMeterics(&tm);
int tempHeight=tm.tmHeight/2;
LONGFONT tempLongFont;
pFont->GetLongFont(&tempLongFont);
CFont tempFont;
tempFont.Create(tempHeight,tempHeight*tm.teWidth/tm.tmHeight,
tempLongFont.lf...,,,,)
pDC->SelectObject(&tempFont);
//创建插入符
::CreateCaret(hWnd,NULL,1,tempHeight);
CSize caretSize=pWnd->GetCaretPos();
CPoint point(caretSize.cx,caretSize.cy+tempHeight);
pWnd->SetCaretPos(point);
pWnd->ShowCaret();
}
COleControl::OnKeyDown(...)
}
运行的结果,只有插入符的反映是正确的,为原来高度的一半.从调试的结果看,也正确,但在输入字符时仍为原来的大小.
请问是何种原因导致了这种情况.
是否是因为键入字符后,字符的显示是用的OnDraw(...),但其pdc里没有选入新的字体呢??
另请问在这种子类化类的控件里如何处理文本颜色.平常用的SetTextColor(...),SetBkColor(,,,)没有什么作用的.
请各位指点一二.