鸡啄米
最新评论及回复
-
3414. 滚动条窗口不动:
对话框做好之后添加的“标准滚动条”,
初始化
SCROLLINFO vinfo;
vinfo.cbSize = sizeof (SCROLLINFO) ;
vinfo.fMask = SIF_RANGE | SIF_PAGE ;
vinfo.nMin = 0 ;
vinfo.nMax = 150 ;
vinfo.nPage = 10 ;
SetScrollInfo(SB_VERT,&vinfo);
事件消息
void DEN3CALIBRATION::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
SCROLLINFO scrollinfo;
GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
滚动条窗口不动 于 2014-8-16 9:03:24 回复switch (nSBCode)
{
case SB_BOTTOM: //滑块滚动到最底部
ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMax)*10);
scrollinfo.nPos = scrollinfo.nMax;
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
case SB_TOP: //滑块滚动到最顶部
ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMin)*10);
scrollinfo.nPos = scrollinfo.nMin;
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
滚动条窗口不动 于 2014-8-16 9:04:59 回复case SB_LINEUP: //单击上箭头
scrollinfo.nPos -= 1;
if (scrollinfo.nPos<scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
ScrollWindow(0,10);
break;
case SB_LINEDOWN: //单击下箭头
scrollinfo.nPos += 1;
if (scrollinfo.nPos>scrollinfo.nMax)
{
scrollinfo.nPos = scrollinfo.nMax;
break;
}
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
ScrollWindow(0,-10);
break;
case SB_PAGEUP: //单击滑块上方空白区域
scrollinfo.nPos -= 5;
if (scrollinfo.nPos<scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
滚动条窗口不动 于 2014-8-16 9:05:38 回复ScrollWindow(0,(scrollinfo.nPos-nPos)*10);
scrollinfo.nPos = nPos;
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
}
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
滚动条可以滚动,但是,窗口不动?能帮忙看看啥原因吗?谢谢2014/8/16 09:02
-
3413. 阴阳:
鸡啄米你好,一直看您的教程,感觉您讲的简洁易懂,非常适合初学者学习,大部分这方面的书或者教程都有个问题,不考虑读者的感受,或者说是没有以由浅入深的方式教给读者知识,您的教程让我觉得非常的好,谢谢啦
这一节我发现了一个问题:重载的OnHScroll函数中,我们所添加部分代码,也就是OnHScroll函数的第8行到第31行,程序执行过程中都没有执行到,也就是说,程序开始执行时,左右拖动滚动块,不论怎么拖动,我所说的这一段代码都没有执行到。貌似每次拖动滚动快,switch语句都会执行到这一行:
// 如果拖动滚动块滚动到指定位置,则pos赋值为nPos的值
case SB_THUMBPOSITION:
pos = nPos;
break;
而且,对于这两个分支:case SB_THUMBPOSITION:
pos = nPos;
break;
// 下面的m_horiScrollbar.SetScrollPos(pos);执行时会第二次进入此函数,最终确定滚动块位置,并且会直接到default分支,所以在此处设置编辑框中显示数值
default:
SetDlgItemInt(IDC_HSCROLL_EDIT, pos);
return;
貌似执行完一个分支之后程序继续执行另一个分支,不是说的switch中执行完一个分支之后,break会跳出switch语句吗?跳出来的话就应该执行switch语句之后的下一句,而不是执行这两个分支中的另一个,希望您有空的话解答一下我的疑惑,谢谢 2014/8/16 01:45
-
3412. 千金药方:
目前还在学习PHP呢2014/8/15 15:43
-
3411. TEST:
void CFileopenandsaveDlg::OnOK()
{
// TODO: Add extra validation here
UpdateData(TRUE);
CFile sourcefile;
CFile destfile;
sourcefile.Open(m_openfile,CFile::modeRead | CFile::shareDenyWrite);
destfile.Open(m_savefile,CFile::modeWrite | CFile::shareExclusive | CFile::modeCreate);
BYTE buffer[2048];
UINT dwbuf = 10;
do{
dwbuf = sourcefile.Read(buffer,2048);
destfile.Write(buffer,dwbuf);
}while(dwbuf != 0);
sourcefile.Close();
destfile.Close();
if(dwbuf == 0){
MessageBox("复制完成!");
}
CDialog::OnOK();
}TEST 于 2014-8-15 16:04:46 回复加强版:
void CFileopenandsaveDlg::OnOK()
{
// TODO: Add extra validation here
UpdateData(TRUE);
if(!m_openfile.IsEmpty() && !m_savefile.IsEmpty()){
if(GetFileAttributes(m_openfile) != -1 && GetFileAttributes(m_savefile) != -1){
CFile sourcefile;//源文件
CFile destfile;//目标文件
sourcefile.Open(m_openfile,CFile::modeRead | CFile::shareDenyWrite);
destfile.Open(m_savefile,CFile::modeWrite | CFile::shareExclusive | CFile::modeCreate);
BYTE buffer[2048];
UINT dwbuf = 10;
do{
dwbuf = sourcefile.Read(buffer,2048);
destfile.Write(buffer,dwbuf);
}while(dwbuf != 0);
sourcefile.Close();
destfile.Close();
if(dwbuf == 0){
MessageBox("复制完成!");
}
}
else{
MessageBox("请输入合法的文件路径!!");
}
}
else{
MessageBox("源文件和目标文件的路径没有填写完全!");
}
//CDialog::OnOK();
}2014/8/15 15:39
-
3410. 若旖若旎:
我有问题,按照指示操作,然后点了调试以后,计算器不出来,出来的是一个WINDOWS的窗口,左边文件视图中有FakeApp文件,下层有关于FakeApp的源文件头文件和资源文件等,中间是白色的框什么都没有,右边是关于外观字体杂项的选项。不是计算器的那个窗口啊,怎么实现,求回复,我弄了两天了出不来效果,求大神回复。123 于 2014-8-20 13:08:11 回复这个……你应该选的单文档吧,初学都会犯……小龟 于 2016-5-17 10:16:39 回复我这个问题解决了,最初新建项目时,应用程序的类型要选择“给予对话框”,不是楼主最初介绍篇里选择的单个文档。2014/8/14 14:29