VC?如何获取一个控件内的字体
首先了解一下CHARFORMAT结构
SetDefaultCharFormat(
CHARFORMAT
cf
);
typedef
struct
_charformat
{
UINT
cbSize;
_WPAD
_wPad1;
DWORD
dwMask;
DWORD
dwEffects;
LONG
yHeight;
LONG
yOffset;
COLORREF
crTextColor;
BYTE
bCharSet;
BYTE
bPitchAndFamily;
TCHAR
szFaceName[LF_FACESIZE];
_WPAD
_wPad2;
}
CHARFORMAT;
其中bCharSet有如下值
lfCharSet
Specifies
the
character
set.
The
following
values
are
predefined:
ANSI_CHARSET
BALTIC_CHARSET
CHINESEBIG5_CHARSET
DEFAULT_CHARSET
EASTEUROPE_CHARSET
GB2312_CHARSET
GREEK_CHARSET
HANGUL_CHARSET
MAC_CHARSET
OEM_CHARSET
RUSSIAN_CHARSET
SHIFTJIS_CHARSET
SYMBOL_CHARSET
TURKISH_CHARSET
Korean
Windows:
JOHAB_CHARSET
Middle-Eastern
Windows:
HEBREW_CHARSET
ARABIC_CHARSET
Thai
Windows:
THAI_CHARSET
OnChangeFont()
是对话框中一按钮消息响应函数
void
CTransformDlg::OnChangeFont()
{
//
TODO:
Add
your
control
notification
handler
code
here
CHARFORMAT
cf;
LOGFONT
lf;
memset(cf,
0,
sizeof(CHARFORMAT));
memset(lf,
0,
sizeof(LOGFONT));
//判断是否选择了内容
BOOL
m_bSelect
=
(m_RichEditCtrlTS.GetSelectionType()
!=
SEL_EMPTY)
?
TRUE
:
FALSE;
if
(m_bSelect)
{
m_RichEditCtrlTS.GetSelectionCharFormat(cf);
}
else
{
m_RichEditCtrlTS.GetDefaultCharFormat(cf);
}
//得到相关字体属性
BOOL
bIsBold
=
cf.dwEffects
CFE_BOLD;
BOOL
bIsItalic
=
cf.dwEffects
CFE_ITALIC;
BOOL
bIsUnderline
=
cf.dwEffects
CFE_UNDERLINE;
BOOL
bIsStrickout
=
cf.dwEffects
CFE_STRIKEOUT;
//设置属性
lf.lfCharSet
=
cf.bCharSet;
lf.lfHeight
=
cf.yHeight/15;
lf.lfPitchAndFamily
=
cf.bPitchAndFamily;
lf.lfItalic
=
bIsItalic;
lf.lfWeight
=
(bIsBold
?
FW_BOLD
:
FW_NORMAL);
lf.lfUnderline
=
bIsUnderline;
lf.lfStrikeOut
=
bIsStrickout;
sprintf(lf.lfFaceName,
cf.szFaceName);
//strcpy(lf.lfFaceName,
cf.szFaceName);
CFontDialog
dlg(lf);
dlg.m_cf.rgbColors
=
cf.crTextColor;
if
(dlg.DoModal()
==
IDOK)
{
dlg.GetCharFormat(cf);
//获得所选的字体属性,如字体、颜色、大小等
if
(m_bSelect)
m_RichEditCtrlTS.SetSelectionCharFormat(cf);
//为选定的内容设定所选字体
else
m_RichEditCtrlTS.SetWordCharFormat(cf);
//为将要输入的内容设定字体//m_RichEditCtrlTS.SetDefaultCharFormat(cf);
//设置输入框内所有字符的字体,包括已经输入的和将要输入的字符
}
}CFont
说明
CFont
font;
VERIFY(font.CreateFont(
12,
//
nHeight
0,
//
nWidth
0,
//
nEscapement
0,
//
nOrientation
FW_NORMAL,
//
nWeight
FALSE,
//
bItalic
FALSE,
//
bUnderline
0,
//
cStrikeOut
ANSI_CHARSET,
//
nCharSet
OUT_DEFAULT_PRECIS,
//
nOutPrecision
CLIP_DEFAULT_PRECIS,
//
nClipPrecision
DEFAULT_QUALITY,
//
nQuality
DEFAULT_PITCH
|
FF_SWISS,
//
nPitchAndFamily
"Arial"));
//
lpszFacename
用java怎样把数据存到数据库中
只能写个大概的,要写数据到数据库中,先得在数据库中建库,库里建表,表里建字段,然后java里建立数据库连接,用SQL语言写数据到表中的字段
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
//String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=数据库名"; //7.0、2000
String url="jdbc:sqlserver://localhost:1433;DatabaseName=数据库名"; //2005
Connection conn=null;
conn= DriverManager.getConnection(url,用户名,密码);
PreparedStatement pst=null;
pst=conn.prepareStatement("Insert Into grade(表名) Values (?)");
pst.setInt(1,你要写的整弄数据);
//pst.setString(2,你要写的字符串数据);
pst.addBatch();
pst.executeBatch();
下面是用visual studio (VC++中MFC)编译的一个程序,出了几个错误,不知道怎么解决,恳请高手帮忙。谢谢
楼上说的对,要是SelectGdiObject还有错,可以将SelectGdiObject换成SelectObject,很可能是这个错误,我在MSDN上未找到这个函数,可能是它错了。 要是是说sin,cos未找到标识符,可以在
stdafx.h中加入#include math.h ,但是一般的MFC程序会包含这个头文件,这就很奇怪
pdc-MoveTo (px=(int)x,py);
中的=应该是+吧
pdc-DeleteDC ();这句是错了的,因为原来使用new用堆来动态构造CClient对象,不用了的话,
应该用delete掉,而pdc-DeleteDC ();释放了pdc-m_hDC这个成员变量而已,其他成员数据以及
本身均并没有删除,会发生内存泄露。
还有就是【猪无为】说的
“或者根本就不要new出来CClientDC,给人感觉怪怪的,一般都是直接构造对象,如
CClientDC clientDC(this);
CClientDC* pdc = clientDC; “
这个说法是不对的,使用new或直接用栈来构造对象都是可以的,没有什么怪不怪的,只是
用new构造对象是一件很复杂的事,需要额外动用很多资源,所以在一般情况下不建议使用
堆(new)来构造对象,再说释放也得自己释放,是件麻烦事。
另外x=30 - 30 * cos(a)句是后边少了“;”的(猪无为)。