一个关于文本显示的问题!!(急//求助) 怎么把一段字符串一一个圆形的方式显示在一副图片的上面。就好像一个图章一样。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 圆形必须设置字体.BOOL CreateFontIndirect( const LOGFONT* lpLogFont );LOGFONT结构中设置字体信息 一个简单的例子!void CRotateDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CPaintDC dc(this); CRect rc; GetClientRect(rc); CString str(_T("............运行结果!")); int nOldMode=dc.SetBkMode(TRANSPARENT); COLORREF clrOld=dc.SetTextColor(RGB(0,0,255)); CFont font; LOGFONT lf; memset(&lf,0,sizeof(LOGFONT)); ::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT),sizeof(lf),&lf); lf.lfHeight = -14; lf.lfWeight = FW_NORMAL; lf.lfClipPrecision = CLIP_LH_ANGLES; for (int i=0;i<3600;i+=150) { lf.lfEscapement = i; font.CreateFontIndirect(&lf); CFont *pOldFont = dc.SelectObject(&font); dc.TextOut(rc.right/2, rc.bottom/2,str); dc.SelectObject(pOldFont); font.DeleteObject(); } dc.SetBkMode(nOldMode); dc.SetTextColor(clrOld); CDialog::OnPaint(); }} 我把我的想法再详细的说一下:在程序初始化的时候,我装载了一个bmp文件在窗口上又个 Edit 控件,我在里面输入汉字点击显示按钮,想在装载的这个bmp 图像上面显示我输入的汉字。程序如下:void CsigilDlg::OnPaint() { ....CPaintDC dc(this);HBITMAP bitmap = ::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_PIC));HDC hdc= ::CreateCompatibleDC(NULL);SelectObject(hdc,bitmap);::StretchBlt(dc.m_hDC,0,0,350,350,hdc,0,0,250,250,SRCCOPY);::DeleteDC(hdc);::DeleteDC(dc);::DeleteObject(bitmap);CDialog::OnPaint();}void CsigilDlg::OnBnClickedOk(){ TODO: 在此添加控件通知处理程序代码 UpdateData(1); int x , y; double mm , xx; int len = this->m_edit.GetLength(); int n = len/2; //汉字个数 int TmpAngle = 270/(n-1);//临时定义印章的夹角范围为270度,以左225度到315度从左开始 for (int i = 0; i< n ; i++) { int Angle = 225-TmpAngle*i; if (Angle < 0) { Angle = 315+TmpAngle*(n-i-1); } x = (cos(3.14*Angle/180)*r); x=cx + x; y = cy - (sin(3.14*Angle/180)*r); xx =450 - Angle ; mm = fmod(xx,360); m_edit = m_edit.Left(1); TTextOut(mm, x, y, m_edit); }}void CsigilDlg::TTextOut(int Angle,int q,int w,CString AStr){ CPaintDC dc(this); dc.SetBkMode(TRANSPARENT); CFont AFont; LOGFONT logFont; ::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT),sizeof(logFont),&logFont); // 为新字体设置旋转属性 HBITMAP bitmap = ::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_PIC)); HDC dc= ::CreateCompatibleDC(NULL); SelectObject(dc,bitmap); ::StretchBlt(dcc.m_hDC,0,0,350,350,dc,0,0,250,250,SRCCOPY); logFont.lfHeight = 50 ; logFont.lfWeight = FW_NORMAL; logFont.lfClipPrecision = CLIP_LH_ANGLES; logFont.lfEscapement = -Angle*10; //设置顺时针方向与X轴的夹角 logFont.lfOrientation = -Angle*10; AFont.CreateFontIndirect(&logFont); CFont *pOldFont = dc.SelectObject(&AFont); dc.TextOut(100,100,"11"); dc1.SelectObject(pOldFont); dc1.TextOut(q,w,AStr); AFont.DeleteObject(); ::DeleteDC(dc1); ::DeleteDC(dc);}一直没有反应,要不就是出错。哪个大哥帮我看看啊。 上面的写错了,是这个 程序如下: void CsigilDlg::OnPaint() { .... CPaintDC dc(this); HBITMAP bitmap = ::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_PIC)); HDC hdc= ::CreateCompatibleDC(NULL); SelectObject(hdc,bitmap); ::StretchBlt(dc.m_hDC,0,0,350,350,hdc,0,0,250,250,SRCCOPY); ::DeleteDC(hdc); ::DeleteDC(dc); ::DeleteObject(bitmap); CDialog::OnPaint(); } void CsigilDlg::TTextOut(int Angle,int q,int w,CString AStr){ CPaintDC dc1(this); dc1.SetBkMode(TRANSPARENT); CFont AFont; LOGFONT logFont; ::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT),sizeof(logFont),&logFont); // 为新字体设置旋转属性 HBITMAP bitmap = ::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_PIC)); HDC dc= ::CreateCompatibleDC(NULL); SelectObject(dc,bitmap); ::StretchBlt(dc1.m_hDC,0,0,350,350,dc,0,0,250,250,SRCCOPY); logFont.lfHeight = 50 ; logFont.lfWeight = FW_NORMAL; logFont.lfClipPrecision = CLIP_LH_ANGLES; logFont.lfEscapement = -Angle*10; //设置顺时针方向与X轴的夹角 logFont.lfOrientation = -Angle*10; AFont.CreateFontIndirect(&logFont); CFont *pOldFont = dc1.SelectObject(&AFont); dc1.TextOut(q,w,AStr); AFont.DeleteObject(); ::DeleteDC(dc1);}void CsigilDlg::OnBnClickedOk(){ //TODO: 在此添加控件通知处理程序代码 UpdateData(1); int x , y; double mm , xx; int len = this->m_edit.GetLength(); int n = len/2; //汉字个数 int TmpAngle = 270/(n-1);//临时定义印章的夹角范围为270度,以左225度到315度从左开始 for (int i = 0; i< n ; i++) { int Angle = 225-TmpAngle*i; if (Angle < 0) { Angle = 315+TmpAngle*(n-i-1); } x = (cos(3.14*Angle/180)*r); x=cx + x; y = cy - (sin(3.14*Angle/180)*r); xx =450 - Angle ; mm = fmod(xx,360); m_edit = m_edit.Left(1); TTextOut(mm, x, y, m_edit); }}一直没有反应,要不就是出错。 哪个大哥帮我看看啊。 谢谢 fanqing(火影忍者+26%)我找到错误了,现在已经显示出来了。 vc2005简体版 写的程序 不能在英文操作系统xp下运行 求比较好的替换api方法 如何在多文档listview视(CView派生)窗中的每个listview视中显示一个列表?! 加解密软件,解密时如何进行判断文件是经过本软件进行加密的? 如何判断是运行状态还是调试状态? 怎样把从文件中读到的数据存储到树型结构中 up是什么意思?? 求一换肤例程 ====[超简单,送分:关于c语言中的字符串的问题?]===== class问题,高分求解!!!***急不容缓*** 前辈看看我写得这个算不算COM库 “COM技术内幕”那本书的例子写出来的COM组件怎么都不能给其他语言引用呢?
BOOL CreateFontIndirect(
const LOGFONT* lpLogFont
);
LOGFONT结构
中设置字体信息
void CRotateDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC dc(this); CRect rc;
GetClientRect(rc);
CString str(_T("............运行结果!"));
int nOldMode=dc.SetBkMode(TRANSPARENT);
COLORREF clrOld=dc.SetTextColor(RGB(0,0,255));
CFont font;
LOGFONT lf;
memset(&lf,0,sizeof(LOGFONT));
::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT),sizeof(lf),&lf);
lf.lfHeight = -14;
lf.lfWeight = FW_NORMAL;
lf.lfClipPrecision = CLIP_LH_ANGLES;
for (int i=0;i<3600;i+=150)
{
lf.lfEscapement = i;
font.CreateFontIndirect(&lf);
CFont *pOldFont = dc.SelectObject(&font);
dc.TextOut(rc.right/2, rc.bottom/2,str);
dc.SelectObject(pOldFont);
font.DeleteObject();
}
dc.SetBkMode(nOldMode);
dc.SetTextColor(clrOld);
CDialog::OnPaint();
}
}
在程序初始化的时候,我装载了一个bmp文件
在窗口上又个 Edit 控件,我在里面输入汉字
点击显示按钮,想在装载的这个bmp 图像上面显示我输入的汉字。
程序如下:
void CsigilDlg::OnPaint()
{
....
CPaintDC dc(this);
HBITMAP bitmap = ::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_PIC));
HDC hdc= ::CreateCompatibleDC(NULL);
SelectObject(hdc,bitmap);
::StretchBlt(dc.m_hDC,0,0,350,350,hdc,0,0,250,250,SRCCOPY);
::DeleteDC(hdc);
::DeleteDC(dc);
::DeleteObject(bitmap);
CDialog::OnPaint();
}void CsigilDlg::OnBnClickedOk()
{
TODO: 在此添加控件通知处理程序代码
UpdateData(1);
int x , y;
double mm , xx;
int len = this->m_edit.GetLength();
int n = len/2; //汉字个数
int TmpAngle = 270/(n-1);//临时定义印章的夹角范围为270度,以左225度到315度从左开始
for (int i = 0; i< n ; i++)
{
int Angle = 225-TmpAngle*i;
if (Angle < 0)
{
Angle = 315+TmpAngle*(n-i-1);
}
x = (cos(3.14*Angle/180)*r);
x=cx + x;
y = cy - (sin(3.14*Angle/180)*r);
xx =450 - Angle ;
mm = fmod(xx,360);
m_edit = m_edit.Left(1);
TTextOut(mm, x, y, m_edit);
}
}void CsigilDlg::TTextOut(int Angle,int q,int w,CString AStr)
{
CPaintDC dc(this);
dc.SetBkMode(TRANSPARENT);
CFont AFont; LOGFONT logFont;
::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT),sizeof(logFont),&logFont);
// 为新字体设置旋转属性
HBITMAP bitmap = ::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_PIC));
HDC dc= ::CreateCompatibleDC(NULL);
SelectObject(dc,bitmap);
::StretchBlt(dcc.m_hDC,0,0,350,350,dc,0,0,250,250,SRCCOPY);
logFont.lfHeight = 50 ;
logFont.lfWeight = FW_NORMAL;
logFont.lfClipPrecision = CLIP_LH_ANGLES;
logFont.lfEscapement = -Angle*10; //设置顺时针方向与X轴的夹角
logFont.lfOrientation = -Angle*10;
AFont.CreateFontIndirect(&logFont);
CFont *pOldFont = dc.SelectObject(&AFont);
dc.TextOut(100,100,"11");
dc1.SelectObject(pOldFont);
dc1.TextOut(q,w,AStr);
AFont.DeleteObject();
::DeleteDC(dc1);
::DeleteDC(dc);
}
一直没有反应,要不就是出错。
哪个大哥帮我看看啊。
程序如下:
void CsigilDlg::OnPaint()
{
....
CPaintDC dc(this);
HBITMAP bitmap = ::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_PIC));
HDC hdc= ::CreateCompatibleDC(NULL);
SelectObject(hdc,bitmap);
::StretchBlt(dc.m_hDC,0,0,350,350,hdc,0,0,250,250,SRCCOPY);
::DeleteDC(hdc);
::DeleteDC(dc);
::DeleteObject(bitmap);
CDialog::OnPaint();
}
void CsigilDlg::TTextOut(int Angle,int q,int w,CString AStr)
{
CPaintDC dc1(this);
dc1.SetBkMode(TRANSPARENT);
CFont AFont; LOGFONT logFont;
::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT),sizeof(logFont),&logFont);
// 为新字体设置旋转属性
HBITMAP bitmap = ::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_PIC));
HDC dc= ::CreateCompatibleDC(NULL);
SelectObject(dc,bitmap);
::StretchBlt(dc1.m_hDC,0,0,350,350,dc,0,0,250,250,SRCCOPY);
logFont.lfHeight = 50 ;
logFont.lfWeight = FW_NORMAL;
logFont.lfClipPrecision = CLIP_LH_ANGLES;
logFont.lfEscapement = -Angle*10; //设置顺时针方向与X轴的夹角
logFont.lfOrientation = -Angle*10;
AFont.CreateFontIndirect(&logFont);
CFont *pOldFont = dc1.SelectObject(&AFont);
dc1.TextOut(q,w,AStr);
AFont.DeleteObject();
::DeleteDC(dc1);
}void CsigilDlg::OnBnClickedOk()
{
//TODO: 在此添加控件通知处理程序代码
UpdateData(1);
int x , y;
double mm , xx;
int len = this->m_edit.GetLength();
int n = len/2; //汉字个数
int TmpAngle = 270/(n-1);//临时定义印章的夹角范围为270度,以左225度到315度从左开始
for (int i = 0; i< n ; i++)
{
int Angle = 225-TmpAngle*i;
if (Angle < 0)
{
Angle = 315+TmpAngle*(n-i-1);
}
x = (cos(3.14*Angle/180)*r);
x=cx + x;
y = cy - (sin(3.14*Angle/180)*r);
xx =450 - Angle ;
mm = fmod(xx,360);
m_edit = m_edit.Left(1);
TTextOut(mm, x, y, m_edit);
}
}
一直没有反应,要不就是出错。
哪个大哥帮我看看啊。
我找到错误了,现在已经显示出来了。