Scrollbar为什么出不来?共150分!!

Cuteric 2002-08-02 11:14:14
本来是想创建一个比Frame大的可以Scroll的视图,但如果不是在MainFrame而是在自己创建的一个FrameWnd中调用就会出问题。如何是好?

代码:
void CMainFrame::OnTest()
{ CTestWnd* pTest = new CTestWnd;
pTest->Create(NULL,NULL);
pTest->ShowWindow(SW_SHOWNORMAL); }
.....
class CTestView:CScrollView;
...
CTestView m_TestView;
...
int CTestWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{ if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_TestView.Create(NULL,NULL, AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 1, 1), this, AFX_IDW_PANE_FIRST, NULL))
return -1;
return 0; }
......
void CTestView::OnInitialUpdate()
{ CScrollView::OnInitialUpdate();
SetScrollSizes(MM_TEXT, CSize(2000,2000)); }

可是好像没什么用,滚动条还是出不来。为何???

如果是在MainFrame的OnCreate中直接创建一个CScrollView,如下:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{ if (!m_TestView.Create(NULL,NULL, AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 1, 1), this, AFX_IDW_PANE_FIRST, NULL))
return -1;
return 0; }(其它不变)

就是可以的。
经我调试,第一种方式根本没调用CTestView的OnInitialUpdate.

高手一定帮忙,周一要交差,又要加班了 :(
剩余的分在http://www.csdn.net/expert/topic/919/919723.xml?temp=.6657373
如果不够,还可再加。
...全文
94 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ThisTimeThree 2002-08-05
  • 打赏
  • 举报
回复
这是说你可以用Create,CreateEx或LoadFrame创建窗口(只CFrameWnd类), pContext 是CCreateContext类指针,其成员变量指定相关连的文档,视图和Frame等, 这个参数可以是NULL,我不知道你是否在CWinApp::OnInitialUpdate()中添加了一个CDocTemplate对象,如果这个对象的View类不是CTestView就不行,如果是就可以。如果你有两个以上CDocTemplate对象,第一个的Doc,View和资源不是所须的,估计(确切讲是猜测,你自己可试一下)pContext是NULL就不一定能行。(估计LoadFrame根据参数确定用哪个CDocTemplate对象,不认为他能自己创建一个吧。[当然这也可能])
romanticist 2002-08-03
  • 打赏
  • 举报
回复
CScrollbar m_Scrollbar;
m_Scrollbar.Create(.....)

Cuteric 2002-08-03
  • 打赏
  • 举报
回复
各位老大帮帮忙
GoogleGeek 2002-08-03
  • 打赏
  • 举报
回复
to:搂住:
让我再仔细的想一想!
Cuteric 2002-08-03
  • 打赏
  • 举报
回复
各位:

问题我已经解决,但我不知道为什么。

我原来在CMainFrame::OnTest()不是这样写的么:
void CMainFrame::OnTest()
{ CTestWnd* pTest = new CTestWnd;
pTest->Create(NULL,NULL);
pTest->ShowWindow(SW_SHOWNORMAL); }

结果我不用pTest->Create(NULL,NULL)
改用pTest->LoadFrame(NULL,
WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL,NULL);
就可以实现在CTestWnd下对CTestView进行滚动了,为什么呢?

我看MSDN中有这样两句:
The framework calls LoadFrame when it creates a frame window using a document template object.

The framework uses the pContext argument to specify the objects to be connected to the frame window, including any contained view objects. You can set the pContext argument to NULL when you call LoadFrame.可我不太懂。
Cuteric 2002-08-03
  • 打赏
  • 举报
回复
psusong(我心飞扬):我看了一下《深入浅出》,在283页候说了,第八个参数如果不具备Doc/View结构,就不必指定pContext参数。
我这个例子没有用Doc/View,因为没有使用Doc只是使用了View,难道我在要加上整个D/V的支持么?
Cuteric 2002-08-03
  • 打赏
  • 举报
回复
psusong(我心飞扬):我还没试,待会我试试,如果不行,就得麻烦你将工程发给我了。eric_zhong@msn.com 深入浅出我也有的,怎么就没看到呢?该打该打。
不是我不用doc/view,实在是还没怎么掌握d/v的精髓,您有没有比较好的建议?
GoogleGeek 2002-08-03
  • 打赏
  • 举报
回复
to:搂住
你的创建方法:pTest->Create(NULL,NULL);根本没有涉及到你自己的类:CTestView,你只要看一下《深入浅出》
或者msdn:
CFrameWnd::Create
BOOL Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle = WS_OVERLAPPEDWINDOW, const RECT& rect = rectDefault, CWnd* pParentWnd = NULL, LPCTSTR lpszMenuName = NULL, DWORD dwExStyle = 0, CCreateContext* pContext = NULL );
最后一个参数与具体地的视图创建有关!
。本人已经采用迂回的方法将你的功能实现出来了
具体的做法是:
2、添加两个类:
class CTestView : public CScrollView
class CTestWnd : public CMDIChildWnd
//PS.:本人为MDI
1、添加一个自定义的文档模板
先添加资源:IDR_NEWFRAMETYPE
用资源编辑器加入相应的资源定义:
ICON:IDR_NEWFRAMETYPE
MENU:IDR_NEWFRAMETYPE
STRING:
IDR_NEWFRAMETYPE \nNewFrame\nNewframe\n
并且在相应的主框架菜单和主视图菜单中增加相应的用于切换视图的菜单项:
ID_NEW_FRAME New frame with scrollview

class CNewFrameApp : public CWinApp
{
public:
CMultiDocTemplate * m_pMainTemplate;
CMultiDocTemplate * m_pNewTemplate;//用于保存自定义的文档模办
..
}
BOOL CNewFrameApp::InitInstance()
{
...
m_pMainTemplate = new CMultiDocTemplate(
IDR_NEWFRATYPE,
RUNTIME_CLASS(CNewFrameDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CNewFrameView));
AddDocTemplate(m_pMainTemplate);

m_pNewTemplate = new CMultiDocTemplate(
IDR_NEWFRAMETYPE,
RUNTIME_CLASS(CNewFrameDoc),
RUNTIME_CLASS(CTestWnd), // user_defined frame
RUNTIME_CLASS(CTestView));//user_defined view with scrollbar!
AddDocTemplate(m_pNewTemplate);

...
}

void CNewFrameApp::OnFileNew()
{
// TODO: Add your command handler code here
//avoid displaying the new file dialog box!
this->m_pMainTemplate->OpenDocumentFile(NULL);
}
3、
void CMainFrame::OnNewFrame()
{
// TODO: Add your command handler code here
CNewFrameApp *pApp=(CNewFrameApp*)AfxGetApp();
//use user_defined frame and view
pApp->m_pNewTemplate->OpenDocumentFile(NULL);

}

-----------
需要的话可以将我的工程发给你!
我是用了一个下午的时间才解决此问题的,刚开始被你的方法引入了一个误区!
我们为什么不好好的利用doc/view呢?
跳出三届外,不再五行中!
ThisTimeThree 2002-08-03
  • 打赏
  • 举报
回复
也就是CMainWnd的 Create(NU...并不起作用,你看到的是框架生成的视
ThisTimeThree 2002-08-03
  • 打赏
  • 举报
回复
我觉得主要问题不是在楼上所说的.结构错了,CView用的是动态产生,即CreateObject,不明白你的编译怎末通过的, 一般讲应该,建议搞明白CFrameWnd::OnCreateClient那里才是产生View的好地方.建议生成并在CWinApp derived class 中添加一CDocTemplate类,( 自定SDI,还是MDI,以及CDocument,CTestWnd,CMyView)
CDocTempalte *pDocT = AfxGetApp()->GetNextDocTemplate(pos);
pDocT->CreateNewFrame(
);
pDocT->InitialUpdateFrame(pFrame);...
你的CView类根本就没父类建议弄清Doc/View结构.

wuxuan 2002-08-03
  • 打赏
  • 举报
回复
gz
jtls 2002-08-03
  • 打赏
  • 举报
回复
SetScrollSizes(MM_TEXT, CSize(2000,2000)); 这里的值设得太大了,改小点
speakboy 2002-08-02
  • 打赏
  • 举报
回复
先看我的吧!
http://www.csdn.net/expert/topic/918/918603.xml?temp=.2668573
系统默认提供的CSS样式风格定义   说 明:在《动易网站管理系统》中,CSS样式风格定义是可以自己自由定义的,也说是说您可以自由添加N多个自定义的风格,然后在各频道的版式模板中调用就行了。下面提供的是系统默认提供的CSS样式风格定义,里面有详细的定义注释,注释标记为:/* ...... */。  友情提醒:修改风格设置必须具备一定网页css样式设计知识,建议您找些这方面的书看一下,在定义中也不能使用单引号或双引号,否则会容易造成程序错误。 ================================================/* 网站链接总的CSS定义:可定义内容为链接字体颜色、样式等 */a{text-decoration: none;} /* 链接无下划线,有为underline */ a:link {color: #000000;} /* 未访问的链接 */a:visited {color: #000000;} /* 已访问的链接 */a:hover{COLOR: #ff0000;} /* 鼠标在链接上 */ a:active {color: #0000ff;} /* 点击激活链接 *//* 顶部频道文字链接的CSS定义--将顶部频道文字链接与网站链接总的CSS定义开,以后可以制作深底浅字的格式,如果要保持原来的设计样式,将此定义内容删除或定义成与网站链接总的CSS相同即可。调用代码为*** */a.Channel:link {color: #ffffff;}a.Channel:visited {color: #ffffff;}a.Channel:hover{COLOR: #ffff00;}a.Channel:active {color: #ffffff;}/* 顶部当前频道文字链接的CSS定义--显示当前频道的文字样式,调用代码为*** */a.Channel2:link {color: #ffffff;}a.Channel2:visited {color: #ffffff;}a.Channel2:hover{COLOR: #ffff00;}a.Channel2:active {color: #ffffff;}/* 顶部频道用户注册链接的CSS定义--调用代码为*** */a.user:link {color: #ffffff;}a.user:visited {color: #ffffff;}a.user:hover{COLOR: #ffff00;}a.user:active {color: #ffffff;}/* 底部版权信息文字链接的CSS定义--与顶部频道文字链接定义的想法相同。可设置与顶部频道文字链接定义不同的文字颜色,网页内定义以预留。调用代码为*** */a.Bottom:link {color: #ffffff;}a.Bottom:visited {color: #ffffff;}a.Bottom:hover{COLOR: #ffff00;}a.Bottom:active {color: #ffffff;}/* 文章栏目标题文字链接的CSS定义--可设置与顶部频道文字链接定义不同的文字颜色,网页内定义以预留。要相同可不设置。调用代码为*** */a.Class:link {color: #037FA8;}a.Class:visited {color: #037FA8;}a.Class:hover{COLOR: #ff0000;}a.Class:active {color: #037FA8;} /* 水平条效果的CSS定义BORDER-BOTTOM-STYLE: dotted; BORDER-LEFT-STYLE: dotted; BORDER-RIGHT-STYLE: dotted; BORDER-TOP-STYLE: dotted;height:1;width:100%;align:left;color:#86BCD4;Shade:no; 水平条虚线效果定义一border:1px dashed #86BCD4; height: 1; 水平条虚线效果定义二align: center;width: 100%;height: 1;color: #86BCD4;Shade:no;SIZE=1; 水平条实线无阴影效果定义*/hr{border:1px dashed #86BCD4; height:1;}/* 列表项目效果的CSS定义*list-style-type: circle; 列表项目样式disc :  CSS1 实心圆circle :  CSS1 空心圆square :  CSS1 实心方块decimal :  CSS1 阿拉伯数字lower-roman :  CSS1 小写罗马数字upper-roman :  CSS1 大写罗马数字lower-alpha :  CSS1 小写英文字母upper-alpha :  CSS1 大写英文字母none :  CSS1 不使用项目符号armenian :  CSS2 传统的亚美尼亚数字cjk-ideographic :  CSS2 浅白的表意数字georgian :  CSS2 传统的乔治数字lower-greek :  CSS2 基本的希腊小写字母hebrew :  CSS2 传统的希伯莱数字hiragana :  CSS2 日文平假名字符hiragana-iroha :  CSS2 日文平假名序katakana :  CSS2 日文片假名字符katakana-iroha :  CSS2 日文片假名序号lower-latin :  CSS2 小写拉丁字母upper-latin :  CSS2 大写拉丁字母*list-style-image: url(Skin/sg_blue/li1.gif); 用图像代替列表项目*list-style-position : outside | insideoutside :  列表项目标记放置在文本以外,且环绕文本不根据标记对齐inside :  列表项目标记放置在文本以内,且环绕文本根据标记对齐*/li{list-style-image: url(Skin/sg_blue/j32.gif); } /* 栏目导航发光阴影效果的CSS定义,调用代码为*** */.Glow{FILTER: Glow(Color=0733B2, Strength=1) dropshadow(Color=0733B2, OffX=1, OffY=1,); WIDTH: 100%; COLOR: #ffffff; LINE-HEIGHT: 20px}/* Body的CSS定义:对应CSS中“BODY”,可定义内容为网页字体颜色、背景、浏览器边框等 */BODY{FONT-SIZE: 9pt;background:url(Skin/blue/bg_all.gif);text-decoration: none;SCROLLBAR-FACE-COLOR: #f6f6f6;SCROLLBAR-HIGHLIGHT-COLOR: #ffffff; SCROLLBAR-SHADOW-COLOR: #cccccc; SCROLLBAR-3DLIGHT-COLOR: #cccccc; SCROLLBAR-ARROW-COLOR: #330000; SCROLLBAR-TRACK-COLOR: #f6f6f6; SCROLLBAR-DARKSHADOW-COLOR: #ffffff;}/* 单元格的CSS定义:对应CSS中的“TD”,这里为总的表格定义,为一般表格的的单元格风格设置,可定义内容为背景、字体颜色、样式等 */TD{FONT-FAMILY:宋体;FONT-SIZE: 9pt;line-height: 150%; }/* 文本框的CSS定义:对应CSS中的“INPUT”,这里为文本框的风格设置,可定义内容为背景、字体、颜色、边框等 */Input{BACKGROUND-COLOR: #ffffff; BORDER-BOTTOM: #666666 1px solid;BORDER-LEFT: #666666 1px solid;BORDER-RIGHT: #666666 1px solid;BORDER-TOP: #666666 1px solid;COLOR: #666666;HEIGHT: 18px;border-color: #666666 #666666 #666666 #666666; font-size: 9pt}/* 按钮的CSS定义:对应CSS中的“BUTTON”,这里为按钮的风格设置,可定义内容为背景、字体、颜色、边框等 */Button{FONT-SIZE: 9pt;HEIGHT: 20px;}/* 下拉列表框的CSS定义:对应CSS中的“SELECT”,这里为下拉列表框的风格设置,可定义内容为背景、字体、颜色、边框等 */Select{FONT-SIZE: 9pt;HEIGHT: 20px;}/* 顶部用户登录文字链接的CSS定义 */.top_UserLogin{color: #037FA8;}/* ==简短标题文字的CSS定义开始== *//* [图文]简短标题文字的CSS定义 */.S_headline1{color: blue;}/* [组图]简短标题文字的CSS定义 */.S_headline2{color: #FF6600;}/* [推荐]简短标题文字的CSS定义 */.S_headline3{color: green;}/* [注意]简短标题文字的CSS定义 */.S_headline4{color: red;}/* ==简短标题文字的CSS定义开始== *//* ==top.asp中的CSS定义开始== */.top_tdbgall /* 顶部表格总背景颜色定义 */{width: 760;background:#ffffff;border-right: 1px solid #000000;border-left: 1px solid #000000;}.top_Channel /* 频道表格背景、文字颜色定义 */{background:#3399CC;color:#3AB1F5!important;text-align: right;}.top_Announce /* 公告表格背景、文字颜色定义 */{background:url(Skin/blue/top_nav_menu.gif);color: #0560A6;height: 30;}.top_nav_menu /* 导航栏表格背景、文字颜色定义 */{background:url(Skin/blue/top_nav_menu.gif);color: #0560A6;height: 30;}.top_Path /* 您现在的位置表格背景、文字颜色定义 */{width: 760;background:#ffffff;border-right: 1px solid #000000;border-left: 1px solid #000000;height: 30;}.top_UserLogin /* 顶部用户登录文字链接的CSS定义 */{color: #037FA8}/* ==top.asp中的CSS定义结束== *//* ==网页中部中的CSS定义开始== */.center_tdbgall /* 中部表格总背景颜色定义 */{background:#ffffff;border-right: 1px solid #000000;border-left: 1px solid #000000;}   /* --网页中部左栏的CSS定义开始-- */.left_tdbgall /* 左栏表格总背景颜色定义 */{background:#f2f2f2;}.left_title /* 左栏标题表格背景、文字颜色定义 */{background:url(Skin/blue/left_title.gif);font-weight:bold;color: 037FA8;height: 26;}.left_tdbg1 /* 左栏内容表格背景、文字颜色定义 */{background:url(Skin/blue/left_tdbg1.gif);line-height: 150%;padding-left:5;padding-right:8;}.left_tdbg2 /* 左栏底部表格背景、文字颜色定义 */{background:url(Skin/blue/left_tdbg2.gif);height: 10;}   /* --网页中部左栏的CSS定义结束-- */   /* --网页中部中栏的CSS定义开始-- */.main_tdbgall /* 中栏表格总背景颜色定义 */{width: 572;background:#ffffff;}.main_shadow /* 中栏内容间隔表格背景颜色定义(575) */{height: 10;}.main_announce /* 中栏公告表格背景、文字颜色定义 */{color: 037FA8;height: 25;background:url(Skin/blue/main_announce.gif);border: 1px solid #8CC3DE;}.main_Search /* 中栏搜索表格背景、文字颜色定义 */{color: 037FA8;height: 25;border: 1px solid #8CC3DE;background:#f7f7f7;}.main_top /* 中栏最新推荐表格背景颜色定义 */{background:url(Skin/blue/main_top.gif);height: 187;}.main_title_575 /* 中栏标题表格背景、文字颜色定义(575) */{color: 037FA8;background:url(Skin/blue/main_title_575.gif);border: 1px solid #8CC3DE;text-align: left;padding-left:40;height: 26;}.main_tdbg_575 /* 中栏内容表格背景、文字颜色定义(575) */{border: 1px solid #8CC3DE;line-height: 150%;text-align: left;padding-left:5;padding-right:5;}.main_title_282 /* 栏目文章列表标题表格背景、文字颜色定义(282) */{background:url(Skin/blue/main_title_282.gif);color: 037FA8;height: 20;border-top: 1px solid #8CC3DE;border-left: 1px solid #8CC3DE;border-right: 1px solid #8CC3DE;}.main_tdbg_282 /* 栏目文章列表内容表格背景、文字颜色定义(282) */{border: 1px solid #8CC3DE;line-height: 150%;text-align: left;padding-left:5;padding-right:5;}.listbg /* --栏目文章列表内容间隔颜色的定义1-- */{background:#ffffff;}.listbg2 /* --栏目文章列表内容间隔颜色的定义2-- */{background:#f7f7f7;}   /* --网页中部中栏的CSS定义结束-- */   /* --文章显示页的CSS定义开始-- */.main_ArticleTitle /* 主标题文字颜色定义 */{color: ff0000;font-weight:bold;font-size: 18;line-height: 150%;}.main_ArticleSubheading /* 副标题文字颜色定义 */{color: 037FA8;font-weight:bold;line-height: 150%;}.main_title_760 /* 标题导航表格背景、文字颜色定义(760) */{background:url(Skin/blue/main_title_760.gif);border: 1px solid #8CC3DE;padding-left:5;height: 25;color: 037FA8;}.main_tdbg_760 /* 内容表格背景、文字颜色定义(760) */{border: 1px solid #8CC3DE;padding: 8;}   /* --文章显示页的CSS定义结束-- *//* ==网页中部中的CSS定义结束== *//* ==Bottom.asp中的CSS定义开始== */.Bottom_tdbgall /* 底部表格总背景颜色定义 */{width: 760;background:#ffffff;border-right: 1px solid #000000;border-left: 1px solid #000000;}.Bottom_Adminlogo /* 管理信息表格背景、文字颜色定义 */{background:#3399CC;color:#ffffff;}.Bottom_Copyright /* 版权信息表格背景、文字颜色定义 */{background:#ffffff;color:#000000;}/* ==Bottom.asp中的CSS定义结束== *//* ==自选风格中的CSS定义结束== */.menu{background-color: #cccccc;width:97%;border: 1px;}.menuBody{background-color: #ffffff;}/* ==自选风格中的CSS定义结束== */

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧