初学者界面实做之---STEP 3

effectiveye 2002-08-21 04:52:24
目前进度:
一个多文档界面,2个子窗口
STEP 3:
我想做得是在主窗口的最下面,也就是STATUS BAR上动态得更新一些数据。
即,我指定一个文件,一但这个文件的数据被更新,这个STATUS BAR 也马上更新,数据
就是文件里的数据。
谢谢,搞定马上给分!!
...全文
56 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
effectiveye 2002-08-21
  • 打赏
  • 举报
回复
我觉得TIMER不错,因为程序执行得比较快,如果完全同步的话,可能跟本来不及看,设定时间做更新,可能效果会好一点,

而且你刚才写的动动,偶也不是很懂,偶今天第一次用MFC做界面,呵呵
还是TIME,好,
最理想的效果就是,
1:能够比较简单得知道文件是否被更新过
2:能获得新追加上去的数据,就是我写的时候用追加的方式写,这样所有的进程都
在文件中,而且可以慢慢的显示给别人看,这样挺好的

不知道能不能方便得实现诶
webber84 2002-08-21
  • 打赏
  • 举报
回复
这样就要涉及到进程间的同步了,timer可能不是很好。你试试这样:选启动界面进程(称为A),在界面进程中来启动另外一个程序(称B)。A中用CreateEvent创建一个事件对象"event"。B中写文件的函数这样写:
void f()
{
HANDLE hEvent=CreateEvent(……,"event")
while(true)
{
ResetEvent(hEvent);
write_to_file();
PostMessage(hwnd,WM_DATAWRITTEN,0,0);
WaitForSingleObject(hEvent);
}
}
WM_DATAWRITTEN为自定义消息,在A中处理这个消息:
void OnDataWritten()
{
read_from_file_and_show();
SetEvent(hEvent);
}
这样也许可以更好地进行进程间的同步。
effectiveye 2002-08-21
  • 打赏
  • 举报
回复
不,不,确切的说应该是两个完全不同的函数,这个仅仅是界面,给人家看的
真正的是另外一个程序,只是在它的每个函数里加一句,把当然过程写在一个文件里面,不是在这个程序里调用的,这个程序,要做的就是先指定一个文件,然后判断文件是否被更新过,更新过就把新的东西读出来,纯粹的演示给别人看,到底在
做什么,当然两者必须同步
effectiveye 2002-08-21
  • 打赏
  • 举报
回复
整个程序框价我已经了解的
而且调通了
现在就是关于文件被修改的判断了
如果我把文件当中的所有内容都读进来,而上次的比较,这样做可以吗?
当然文件的内容不会很长
可能我对时间的要求要高些,settimer(1,1);
这样的时间能完成操作吗?
还是有什么更好的方法?
webber84 2002-08-21
  • 打赏
  • 举报
回复
1:nIDEvent就是定时器的ID,随便设一个不重复的值就行了。
2:是的。
3:你不用管它,基类函数有一些自己的事要做。
4:既然写文件的是你的程序,那你还不知道文件什么改变吗?如果那样,你写完文件以后发一个消息到你的界面程序,这样边timer都不用了。
effectiveye 2002-08-21
  • 打赏
  • 举报
回复
nIDEvent就是前面的设置的1吗?

OnTimer(UINT nIDEvent)函数就可以让程序在每阁SETTIMER后一参数后调用
一次是吗??
那CMDIFrameWnd::OnTimer(nIDEvent)是干什么的呢?

“要知道文件是不是被改变可以通过比较两次的访问时间来确定”
访问时间??是我令一个程序不断得写内容入该文件,我怎么知道访问时间呢?
webber84 2002-08-21
  • 打赏
  • 举报
回复
CMainFrame::OnCreate()
{
…………
SetTimer(1,1000) //间隔1s,根据你的需要来改.
}
然后用classwizard在CMainFrame中为WM_TIMER添加一个处理程序:
void CMainFrame::OnTimer(UINT nIDEvent)
{
if(文件被改变)
{
m_wndStatus.SetPaneText(0,"新内容");
}
CMDIFrameWnd::OnTimer(nIDEvent);
}
effectiveye 2002-08-21
  • 打赏
  • 举报
回复
看了,可是不太明白诶

能不能给个例子,关于SetTimer 和 OnTimer
effectiveye 2002-08-21
  • 打赏
  • 举报
回复
谢谢,谢谢,偶去查查资料的说

能得到您及时的帮助,太好了

搞定再奉上100分

其实,刚接到任务我还真是1滴汗诶~~毕竟一直用纯C++写东西,那个做完了,突然
要我做界面,还好,在这里有许多热心的人的帮助
webber84 2002-08-21
  • 打赏
  • 举报
回复
timer不是一个控件,你可以看看MSDN中对SetTimer的说明。
要知道文件是不是被改变可以通过比较两次的访问时间来确定。
effectiveye 2002-08-21
  • 打赏
  • 举报
回复
不是很清楚诶~~

TIME是控件吗?
还是自己写??

还有有没有方便的函数知道文件是否被改变??

谢谢
webber84 2002-08-21
  • 打赏
  • 举报
回复
如果要文件改变的频度不高的话,可以用一个timer,间隔时间短一点,每次扫描一下那个文件看有没有改变,相应地更新status bar.
void CMainFrame::OnTimer()
{
if(需要更新)
{
m_wndStatus.SetPaneText(0,"新内容");
}
}
effectiveye 2002-08-21
  • 打赏
  • 举报
回复
文件是在程序外更新的,
其实这个东西只不过上一个演示界面,用来给别人看的
真正的程序是在后台操作的,会把进程写入一个文件,而这个程序只要把当前进程
给显示出来
lqbn 2002-08-21
  • 打赏
  • 举报
回复
文件如果是在程序里面更新的话还比较好办,如果在程序外面更新,那就比较复杂了。有谁知道第二种情况的处理方法,关注中。。。。
effectiveye 2002-08-21
  • 打赏
  • 举报
回复
我不知道什么时候那个文件会被更新诶

所以必须“捆绑”,可我不知道该怎么做:(
zhakewei 2002-08-21
  • 打赏
  • 举报
回复
每一块肯定对应一个ID获得了ID就可以解决你的问题,你可以写一个函数,用来向那个窗口写进文字,然后在你需要改变的地方加入这个函数就解决了
effectiveye 2002-08-21
  • 打赏
  • 举报
回复
effectiveye@163.com
w_king 2002-08-21
  • 打赏
  • 举报
回复
该我你的E-mail
w_king666@163.com
effectiveye 2002-08-21
  • 打赏
  • 举报
回复
不可以定期得读,必须时刻更新

怎么样才能让下面的STATUS BAR 能 不断得从一个文件中获取更新信息呢

而且STATUS BAR好象也就好几块,我要的是最前面那块,就象任何一个WINDOWS
窗口那样,你点击菜单,下面都会显示一些信息

aben456 2002-08-21
  • 打赏
  • 举报
回复
定期读文件,写往status bar的变量里面
加载更多回复(2)

604

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 控件与界面
社区管理员
  • 控件与界面社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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