帮帮我(初学VC的女孩子)
请问如何获得一个子窗体的字体,是不是用GetFont;
如果是用GetFont,那为什么我的如下程序不行呢?????
请看如下代码:
m_hOicq是一个外部程序的主窗口
m_hOk是主窗口上一个Button的句柄 CWnd *m_hok; (已经获得)
m_button是自己要创建的一个Button;
这是创建m_button的代码;
程序功能是用自己创建的m_button来代替m_hOk;
void CMyoicqDlg::CreateButton()
{
CFont *m_font=m_hOk->GetFont();
CRect rect;
m_hOk->GetWindowRect(rect);
m_hOk->ScreenToClient(rect);
rect.left+=10;
rect.top+=10;
rect.bottom+=10;
rect.right+=10;
m_hOk->ShowWindow(SW_HIDE);
m_hOk->EnableWindow(FALSE);
if(m_button.Create("Button1",WS_CHILD¦WS_VISIBLE¦WS_TABSTOP¦BS_DEFPUSHBUTTON,
rect,m_hOicq,IDC_STARTBUTTON)==FALSE)
MessageBox("error");
m_button.SetFont(m_font,TRUE);
}
但执行后为什么m_button的字体看起来明显和m_hOk的字体不一样;
真是搞不懂哎
问题点数:38、回复次数:62Top
1 楼xtky_limi(窗外细雨)回复于 2001-12-10 11:26:07 得分 0
帮你pushTop
2 楼zhxx(做个好流氓有多难)回复于 2001-12-10 12:20:01 得分 0
呵呵Top
3 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 12:46:55 得分 0
CWnd::GetFont
CFont* GetFont( ) const;
Return Value
A pointer to a CFont that contains the current font.
The pointer may be temporary and should not be stored for later use.
Remarks
Gets the current font for this window.
上面是MSDN说的,好象是说其为临时的,不能为后面所用。
换写方法试试。
CFont* m_font=m_hOK->GetFont();
LOGFONT logfont;
m_font->GetObject(logfont);
CFont* newfont=new CFont();
newFont->CreateFontIndirect(&logfont);
Top
4 楼han012(阿毛)回复于 2001-12-10 13:01:23 得分 0
将语句 CFont *m_font=m_hOk->GetFont(); 向后移.(如下所示)
另外,要判断m_font是否为NULL
void CMyoicqDlg::CreateButton()
{
CRect rect;
m_hOk->GetWindowRect(rect);
m_hOk->ScreenToClient(rect);
rect.left+=10;
rect.top+=10;
rect.bottom+=10;
rect.right+=10;
m_hOk->ShowWindow(SW_HIDE);
m_hOk->EnableWindow(FALSE);
CFont *m_font=m_hOk->GetFont();
if(m_button.Create("Button1",WS_CHILD¦WS_VISIBLE¦WS_TABSTOP¦BS_DEFPUSHBUTTON,
rect,m_hOicq,IDC_STARTBUTTON)==FALSE)
MessageBox("error");
if(m_font==NULL)
MessageBox("error");
else
m_button.SetFont(m_font,TRUE);
}
Top
5 楼dxj221(green)回复于 2001-12-10 15:05:09 得分 0
不行,,,还是不行Top
6 楼kingtsui(http://community.studyez.com/blogs/silentacorn)回复于 2001-12-10 15:45:45 得分 0
1、如果原来的Button没有使用SetFont,而是采用OwnerDraw等方式实现的,那么你用GetFont是不可行的
2、GetFont和SetFont是针对整个Dialog或Window的吧Top
7 楼dxj221(green)回复于 2001-12-10 15:48:55 得分 0
哎 完了
没人解决了Top
8 楼kingtsui(http://community.studyez.com/blogs/silentacorn)回复于 2001-12-10 15:55:01 得分 0
想想别的办法吧,正考虑中...Top
9 楼dxj221(green)回复于 2001-12-10 16:02:12 得分 0
ai.......Top
10 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 18:13:53 得分 0
上面代码有误
CFont* m_font=m_hOK->GetFont();
LOGFONT logfont;
m_font->GetLogFont(&logfont);//**************在这行
CFont* newfont=new CFont();
newFont->CreateFontIndirect(&logfont);
用newFont进行下一步操作。我检验了,
如果不是位图BUTTON是可以得到新的FONT的。
Top
11 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 18:22:53 得分 0
上面的操作我检验过了,完全可以实现,如果不行贴出EMAIL我给测试代码。Top
12 楼dxj221(green)回复于 2001-12-10 18:23:03 得分 0
Thanks show !!!! :)Top
13 楼sunyuzhe114(阿哲)回复于 2001-12-10 18:23:50 得分 0
http://www.csdn.net/expert/topic/411/411075.shtm
代码有13000行的超cool表格程序,如何开发成activeX控件,有兴趣的人留下email,我把源程序发给你们
分数为150分
十万火级,如能给出答案,再送300分
有兴趣的人留下email
我把程序发给你们。
一个很cool的表格程序,请问如何改为activeX控件,有兴趣的我把源代码发给你们,感兴趣的人留下email,
是vc写的非常cool
Top
14 楼dxj221(green)回复于 2001-12-10 18:24:14 得分 0
能不能告诉我你的Email???Top
15 楼dxj221(green)回复于 2001-12-10 18:25:25 得分 0
哦 忘了 能告诉我为什么么???? 谢谢 ShowTop
16 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 18:27:29 得分 38
CFont* pFont=m_b.GetFont();
m_B2.SetFont(pFont,TRUE);
我又看了一下,这么用也可以呀!
Top
17 楼yheysj(vc_help)回复于 2001-12-10 18:28:12 得分 0
LOGFONT lf;
句柄.GetCurrentFont->GetLogFont(&lf);
Top
18 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 18:28:44 得分 0
hp12_ps@yeah.netTop
19 楼dxj221(green)回复于 2001-12-10 18:32:30 得分 0
为什么 我原来的程序不行呢?? :(Top
20 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 18:44:08 得分 0
发原码吧,好难猜的。Top
21 楼dxj221(green)回复于 2001-12-10 18:53:48 得分 0
xixi,我也是学来的, 代码就在上边啊!! :)
你看了么?Top
22 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 19:02:47 得分 0
难的看,原因不好确定,可能是CREATE的原因,也可能是别的原因吧,我没做过不好说。Top
23 楼dxj221(green)回复于 2001-12-10 19:03:42 得分 0
我要给分了 :) 就给ShowTop
24 楼dxj221(green)回复于 2001-12-10 19:06:40 得分 0
那把你的代码详细地讲讲 好么??Top
25 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 19:07:03 得分 0
哈哈,好。Top
26 楼dxj221(green)回复于 2001-12-10 19:08:29 得分 0
谢谢 :)Top
27 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 19:11:05 得分 0
怎么讲啊,不就是获得字体,再设置字体吗?Top
28 楼dxj221(green)回复于 2001-12-10 19:15:06 得分 0
CFont* m_font=m_hOK->GetFont();
m_newButton->SetFont(m_font,true);
这样为什么不行;
Top
29 楼dxj221(green)回复于 2001-12-10 19:17:11 得分 0
The WM_SETFONT message applies to all controls, not just those in dialog boxes.
The best time for the owner of a dialog box control to set the font of the control is when it receives the WM_INITDIALOG message. The application should call the DeleteObject function to delete the font when it is no longer needed; for example, after it destroys the control.
The size of the control does not change as a result of receiving this message. To avoid clipping text that does not fit within the boundaries of the control, the application should correct the size of the control window before it sets the font.
向自己的BUTTON发给消息试试。
SendMessage(WM_SETFONT,*m_Font,TRUE)
有人说这样可以,,可是SendMessage(WM_SETFONT,*m_Font,TRUE) 语法是错误的啊??
应该怎么用啊????
Top
30 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 19:18:57 得分 0
我的就可以啊。你那我就不知道了撒。
不过,可能是这样撒
The pointer may be temporary and should not be stored for later use.
(这个指针可能为临时的,其不能存储为以后所调用)出自MSDN。Top
31 楼dxj221(green)回复于 2001-12-10 19:24:12 得分 0
我的和你有区别,,,我的是一个指针,你的不是,,,你看见了么 m_hOk->Top
32 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 19:25:37 得分 0
LRESULT SendMessage(
HWND hWnd, // handle to destination window
UINT Msg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
四个参数撒。
可能是:
LOGFONG logfont;
m_font.GetLogFont(&logfont);
::SendMessage(m_b.m_hWnd,WM_SETFONT,&logfont,TRUE);
的,具体WPARAM,LPARAM是什么我也不清楚撒。Top
33 楼dxj221(green)回复于 2001-12-10 19:30:55 得分 0
oh,:) 比较好玩, 以后我有什么问题, 解决不了,我就发Email到你的信箱,
好么??
Top
34 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 19:34:47 得分 0
可以撒,不过我不保证都有你满意的答案撒Top
35 楼dxj221(green)回复于 2001-12-10 19:35:05 得分 0
LOGFONT 和CFONT 有什么区别啊????Top
36 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 19:38:35 得分 0
一个是结构,一个是类。后者把前者包装在内部了。Top
37 楼dxj221(green)回复于 2001-12-10 19:45:59 得分 0
o, 好了我要吃饭了,以后你要常来看我的贴子啊. 我只有12分可用分了, 55555555555.
怎么才能让我的可用分多多????Top
38 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 19:47:57 得分 0
多发贴,都看贴贝
Top
39 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 19:48:40 得分 0
多发贴,都看贴呗,好要多回贴
。Top
40 楼dxj221(green)回复于 2001-12-10 19:51:54 得分 0
oh,我在试一试你的第二种方法. 我就去吃饭了Top
41 楼dxj221(green)回复于 2001-12-10 19:57:02 得分 0
o
问一下
CWnd *m_hok1;
CWnd m_hok;
现在要想把m_hok等于*m_hok1,怎么转化啊????Top
42 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 20:02:59 得分 0
o
m_hok1=&m_hok.Top
43 楼dxj221(green)回复于 2001-12-10 20:07:39 得分 0
xixi 和我想的一样!!!!Top
44 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 20:12:00 得分 0
你这个贴子人气好高了啊。Top
45 楼show(等我轻舞飞扬(抵制日货))回复于 2001-12-10 20:13:06 得分 0
我先走了,有事发到我油箱把。Top
46 楼dxj221(green)回复于 2001-12-10 20:19:45 得分 0
好象不对啊;
我先在已经得到了 m_hok1(CWnd *m_hok1);
而m_hok(CWnd m_hok)是后来定义的,
现在要让m_hok里的东西等于m_hok1所指的东西; 刚才我试了语发没问题了,,但执行错误Top
47 楼fengfeng1_1(山高月小)回复于 2001-12-10 22:42:05 得分 0
上海的吗?
一起学吧!Top
48 楼Hellow(Hellow_me)回复于 2001-12-10 22:44:17 得分 0
为何女人如此受欢迎,反了??!!!Top
49 楼Kummer(Kummer)回复于 2001-12-11 01:04:42 得分 0
我要是个女人就好了,我的问题已经贴出来好久了,就是没人理
强烈要求男女平等!!!!!!!!!!!!!!!!!!!
反对性别的歧视!!!!!!!!!!!!!!!!!!!Top
50 楼strangman(第一次)回复于 2001-12-13 22:25:20 得分 0
: Kummer(Kummer) (2001-12-11 1:04:42) 得0分
我要是个女人就好了,我的问题已经贴出来好久了,就是没人理
强烈要求男女平等!!!!!!!!!!!!!!!!!!!
反对性别的歧视!!!!!!!!!!!!!!!!!!!
我也一样,这世道 ,大家都是男人Top
51 楼netxy(netxy)回复于 2001-12-13 22:40:39 得分 0
就象小羊进了狼群。Top
52 楼bluecrest(高歌)回复于 2001-12-13 22:43:50 得分 0
为什么一定要强调自己是女生呢
好像大家都很**一样Top
53 楼cft007(振翅欲飞)回复于 2001-12-13 23:03:09 得分 0
han012(阿毛)的说法是对。我赞成。 Top
54 楼dgb(dgb)回复于 2001-12-14 00:05:45 得分 0
我试过了,这样是可以的,但是在最后一定要删除font
CFont *m_font=new CFont;
LOGFONT lf;
CFontDialog m_fontdlg;
if(m_fontdlg.DoModal()==IDOK)
{
m_fontdlg.GetCurrentFont(&lf);
m_font->CreateFontIndirect(&lf);
}
CRect rect;
m_hOk.GetWindowRect(rect);
m_hOk.ScreenToClient(rect);
rect.left+=10;
rect.top+=10;
rect.bottom+=100;
rect.right+=100;
m_hOk.ShowWindow(SW_HIDE);
m_hOk.EnableWindow(FALSE);
if(m_button.Create("Button1",WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_DEFPUSHBUTTON,
rect,this,5051)==FALSE)
MessageBox("error");
m_button.SetFont(m_font,TRUE);
m_button.SetWindowText("button1");Top
55 楼Leonardo263090(牛呆呆)回复于 2001-12-14 01:52:01 得分 0
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ 建议女孩子学 Delphi 的好,简单有用, ┃
┃ ┃
┃ 为什么要抱着这么难明白的 VC++ 和 Win API 呢? ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Top
56 楼scxy(小熊)回复于 2001-12-14 08:44:36 得分 0
to 清风:肯定就是非女孩子了Top
57 楼dxj221(green)回复于 2001-12-17 09:22:09 得分 0
不是我要学啊,公司要求的 哎Top
58 楼dxj221(green)回复于 2001-12-17 09:23:50 得分 0
问题已经解决了 谢谢大家了Top
59 楼zhuang094(hz-huang)回复于 2001-12-17 10:01:17 得分 0
看来csdn上女孩子好受欢迎。Top
60 楼fucher(自以为是)回复于 2001-12-17 10:23:09 得分 0
我有一本讲那的好书哦!
你可以CALL哦/
IAMBACK·263。NETTop
61 楼chinaqianhu(乾瑚)回复于 2001-12-17 10:52:54 得分 0
呵呵,
我也也要在注册一个新名字,
冒充女孩子,
csdn,上MM是人见人怜。。。。Top
62 楼xiaobei525(汤姆)回复于 2001-12-17 11:14:06 得分 0
if this girl (or women or Mrs or lady or other)is beautiful...Top




