[程序][界面][老死]我一个MFC的程序为什么界面老死掉

09月 17th, 2008 by admin
Posted in VC/MFC | No Comments »

一个线程死循环,(10秒间隔)不停的读数据库
启动后,界面就卡死在那里
怎么搞

//查询看有新的数据添加进去没有

UINT SqlThreadProc(LPVOID param){
CString cid;
CString msql="update emd_message  set STATUS_FLAG =1 where command_id = ";
CLog log;

CDataBase dbs;
dbs.getConn();

CClient client;
char* locoMess;

while(TRUE){
Sleep(5000);
try{
dbs.getRec();
dbs.pRec->Open("select command_id as cid,command_data as cd from emd_message where STATUS_FLAG =0",
dbs.pConn.GetInterfacePtr(), //获得库连库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText
);

_variant_t cstr;
CString str;
while(!dbs.pRec->adoEOF){

cstr=dbs.pRec->GetCollect("cid");
str = (char*)_bstr_t(cstr);
msql+=str;
cstr=dbs.pRec->GetCollect("cd");
locoMess=(char*)_bstr_t(cstr);

client.SendString(locoMess);
CDataBase db1;
db1.getConn();
db1.insertSql(msql);
db1.closeConn();
dbs.pRec->MoveNext();
}
dbs.closeRec();
}catch(_com_error &e){
log.log("SqlThreadProc");
log.log(e.ErrorMessage());
}
}
return 0;
}

//查询看有新的数据添加进去没有

UINT SqlThreadProc(LPVOID param){
CString cid;
CString msql="update emd_message  set STATUS_FLAG =1 where command_id = ";
CLog log;

CDataBase dbs;
dbs.getConn();

CClient client;
char* locoMess;

while(TRUE){
Sleep(5000);
try{
dbs.getRec();
dbs.pRec->Open("select command_id as cid,command_data as cd from emd_message where STATUS_FLAG =0",
dbs.pConn.GetInterfacePtr(), //获得库连库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText
);

_variant_t cstr;
CString str;
while(!dbs.pRec->adoEOF){

cstr=dbs.pRec->GetCollect("cid");
str = (char*)_bstr_t(cstr);
msql+=str;
cstr=dbs.pRec->GetCollect("cd");
locoMess=(char*)_bstr_t(cstr);

client.SendString(locoMess);
CDataBase db1;
db1.getConn();
db1.insertSql(msql);
db1.closeConn();
dbs.pRec->MoveNext();
}
dbs.closeRec();
}catch(_com_error &e){
log.log("SqlThreadProc");
log.log(e.ErrorMessage());
}
}
return 0;
}

//查询看有新的数据添加进去没有

UINT SqlThreadProc(LPVOID param){
CString cid;
CString msql="update emd_message  set STATUS_FLAG =1 where command_id = ";
CLog log;

CDataBase dbs;
dbs.getConn();

CClient client;
char* locoMess;

while(TRUE){
Sleep(5000);
try{
dbs.getRec();
dbs.pRec->Open("select command_id as cid,command_data as cd from emd_message where STATUS_FLAG =0",
dbs.pConn.GetInterfacePtr(), //获得库连库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText
);

_variant_t cstr;
CString str;
while(!dbs.pRec->adoEOF){

cstr=dbs.pRec->GetCollect("cid");
str = (char*)_bstr_t(cstr);
msql+=str;
cstr=dbs.pRec->GetCollect("cd");
locoMess=(char*)_bstr_t(cstr);

client.SendString(locoMess);
CDataBase db1;
db1.getConn();
db1.insertSql(msql);
db1.closeConn();
dbs.pRec->MoveNext();
}
dbs.closeRec();
}catch(_com_error &e){
log.log("SqlThreadProc");
log.log(e.ErrorMessage());
}
}
return 0;
}

主线程同时都做哪些事?界面是自己绘制的吗?如果不启动工作线程会不会有问题?

_variant_t cstr;
CString str;
while(!dbs.pRec->adoEOF){

Sleep(0); // 加上试试

cstr=dbs.pRec->GetCollect("cid");
str = (char*)_bstr_t(cstr);
msql+=str;
cstr=dbs.pRec->GetCollect("cd");
locoMess=(char*)_bstr_t(cstr);

client.SendString(locoMess);
CDataBase db1;
db1.getConn();
db1.insertSql(msql);
db1.closeConn();
dbs.pRec->MoveNext();
}

你是不是在主线程加了类似WaitForSingleObject(hThread, INFINITE);的语句啊

死锁

Sleep(0); // 加上试试

加上了,好了
LSD可以说说原因不

显然主界面线程没有执行消息循环,在其他地方就已经阻塞了

Sleep(0);

释放该线程时间片给界面线程,用于处理界面响应。

Tags: , , ,

[菜鸟][界面][实现]菜鸟请教高手这个界面怎么实现

09月 15th, 2008 by admin
Posted in VC/MFC | No Comments »

在单文档应用 程序中,要 在客户区的底部显示一个 对话框,该怎么实现?
看这样 做对吗?View类派生自CRichEditView,在资源管理器中编辑一对话框模板,假设ID为ID_Dialog,然后在 CMainFrame
类中 定义 CDialogBar  m_wndSend;最后在CMainFrame类的OnCreate函数 中添加如下代码:
if (!m_wndSend.Create(this, ID_Dialog, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC, ID_Dialog))
{
TRACE0("Failed to create Dialog bar
");
return -1;      // fail to create
}
        m_wndSend.EnableDocking(CBRS_ALIGN_BOTTOM);
DockControlBar(&m_wndSend, AFX_IDW_DOCKBAR_BOTTOM);
m_wndSend.SetWindowText(_TEXT("发送窗口"));
哪位大侠指点下啊,谢谢!

Tags: , , ,

[界面][麻烦]我觉得用VC做界面要比VB麻烦的多不好用啊

09月 12th, 2008 by admin
Posted in VC/MFC | No Comments »

大家怎么认为的

正是麻烦才体现出价值。。。

定位不一样。

vc 界面,可以做的很完美,就是麻烦点
vb 界面,简单一些,就是什么都要凑合着用

强烈同意!

这个就像是吃快餐和自己下厨一样,呵呵

没用过VB
呵呵

反正vc里面只要想要都需要自绘 ,痛苦啊。

引用 4 楼 Enigma_CN 的回复:
vc 界面,可以做的很完美,就是麻烦点
vb 界面,简单一些,就是什么都要凑合着用

同意

VB和VC根本就不是一回事,最好不要拿来比较

VC实际上也是很方便的,如果对API及像MFC WTL之类的话

两者从编程思路上就不一样吧

正因为麻烦,才功能强大,灵活性强嘛

DHTML也是一个讨巧的解决方法
http://blog.csdn.net/IamNieo/archive/2008/09/01/2860115.aspx
可以看看Dhtml实现的界面

VC 玩的好了
也就不觉得麻烦了
这个就像是吃快餐和自己下厨一样,呵呵  这个比喻很好

引用 6 楼 King_hhuang 的回复:
这个就像是吃快餐和自己下厨一样,呵呵

准确,哈哈

引用 10 楼 wltg2001 的回复:
VB和VC根本就不是一回事,最好不要拿来比较

同意

引用 4 楼 Enigma_CN 的回复:
vc 界面,可以做的很完美,就是麻烦点
vb 界面,简单一些,就是什么都要凑合着用

赞同

我认为VC好的

VB界面是比较好做些,是比VC要简单
因为他封装得太多了…
带来的后果就是做简单东西简单,做复杂东西太难
VC就是要自己写,所以才灵活,好用

在VC版发这样的问题,不得不让人发笑啊,呵呵

vc比较灵活

Tags: , ,

[般的][界面][缩放]非一般的界面缩放问题请教好心人。

09月 11th, 2008 by admin
Posted in VC/MFC | No Comments »


如上图所示,我的要求是在第一次单击“设置”按钮时让该按钮左面的部份缩靠于该按钮的LEFT,第二次单击时恢复原始状态;第一次单击“附件”按钮时让该按钮左面的部份缩靠于该按钮的RIGHT,第二次单击时恢复原始状态。但注意自动要自动识别窗口的状态,即缩放窗口的左端不影响右端,反之亦然。

Tags: , , ,

[界面][必要]用MFC做界面还有必要吗

09月 1st, 2008 by admin
Posted in VC/MFC | No Comments »

界面编程,C#比C++(MFC)要方便的多。

大家说说,核心代码用C(C++ MFC),界面用C#,这样的代码安全吗???

MFC的牛人们,你们自己感觉用MFC做UI如何?现在是不是已经非常熟悉而无视它的麻烦了?

跟其他因素都有关系

路过。。。。

混合编程也是一种方向!

用过C#啊 不知道怎么样 可以试试 用MFC做界面还可以的 还是很麻烦

非常有必要。

如果界面不需要很花哨,只是功能化的话,感觉MFC不算麻烦
可能是习惯了的原因吧

用C#还是不大习惯

的确有点麻烦,特别要做特效处理的时候,
如果只是普通的处理, 就没什么

如果你有现成的界面库,那用什么开发都很简单。
一般传统的C/C++公司,都会有比较成熟的库和技术,所以不会也很少采用混合编程的。

而且,楼住最好分清楚了,C/C++是语言,MFC是库。

引用 9 楼 king820802 的回复:
如果你有现成的界面库,那用什么开发都很简单。
一般传统的C/C++公司,都会有比较成熟的库和技术,所以不会也很少采用混合编程的。

而且,楼住最好分清楚了,C/C++是语言,MFC是库。

知道知道,MFC是库,呵呵~

用MFC做界面时会跟一个比较大的MFC的library,为了生成比较小的程序我一般用WTL。

本人是从C#转到C++
我都是做后台程序所以对MFC不是很重视  可可 

是有些麻烦

引用 11 楼 qgw_2000 的回复:
用MFC做界面时会跟一个比较大的MFC的library,为了生成比较小的程序我一般用WTL。

改过一个wtl的程序,确实发现,很牛逼

茫然……

用QT做界面,不会MFC…

c#编码效率确实是要好的多,其实这都是一个熟练度 习惯的问题。

顶一个,同感

引用 18 楼 dgxcz 的回复:
顶一个,同感

方不方便在于使用什么样的库和对该库的熟悉程度.

Tags: , ,

[各位][大老][界面]各位大老!!!! C++界面问题

08月 22nd, 2008 by admin
Posted in VC/MFC | No Comments »

各位老大们,VC窗口界面中如何设置各个控件的tab键功能!就是用户可以不使用鼠标就能完成操作。

不明白你说什么?是用tab键切换控件?如果是对话框,选中tab stop属性为true就行了;如果是非对话框类,需要自己处理,切换焦点。

在VC中编辑对话框的界面中,使用快捷键ctrl + d
这时候你会看到每个控件上都会标记出数字,按顺序用鼠标点击,然后就会按你点击的顺序来布置tab order了

好的,谢谢了!!!非常感谢!!!!

Tags: , , ,

[文档][界面][应用程序]多文档界面应用程序中是否可以动态加载不同类型的视图

07月 26th, 2008 by admin
Posted in VC/MFC | No Comments »

我的程序是多文档界面应用程序,对窗口进行了分割,类似于资源管理器的样子:左视图是一个CTreeView派生类,我打算点击树视图的子项(item)时,右边的视图可以根据需要变成不同的视图,比如CScrollView、CFormView的派生类。但我菜鸟一个,不知道该怎么做,希望大侠们指教!
拜谢!

参考CDocument::AddView()中的例子。

不好意思,那个例子我看不太懂。
现在我的问题有两个:1、单击左视图后,如何通知框架类,或者有没有必要和框架通信?我尝试了用SendMessage()结果发现框架接收不到消息;
2、如果要加载其他视图以替换现有的右视图,该如何实现。貌似CDocument::AddView()中的例子涉及到了这一点,但我实在是看不太懂。
大侠们能否说的详细一点?
谢谢了

虽然我很关注,可惜我不懂

Tags: , , ,

[界面][实现]这样的界面怎样实现为好

07月 17th, 2008 by admin
Posted in VC/MFC | No Comments »

窗口里左边为一TreeCtrl,右边为一ListCtrl,两者无缝的并在一起,两控件每行对齐,弹开Tree控件时,ListTrl自动添加相应行。且可以象SplitterWnd一样改变它们宽度。这样的界面有现成控件吗?如何用VC实现

有现成的XTreme中有个例子,和资源管理器几乎一模一样

关注

http://www.codeproject.com/treectrl/ctreelistctrl.asp

http://www.vckbase.com/code/winui/list/supergrid.zip

呵呵,偶这里有现成的代码
你要不?把邮箱发过来,偶给你发过去
不过记得要给分哦

lizhongan@sina.cm
一定给分,呵呵

是lizhongan@sina.com

给我一份     学习一下   谢谢!!
zhaofenghai@gmail.com

我也想要一份,谢谢了
yihan858@163.com

学习一下,先谢谢zhangsss
pippen_chow@163.com

Tags: , ,

[界面][通信][程序]界面与通信程序的 连接问题

07月 15th, 2008 by admin
Posted in VC/MFC | No Comments »

我想做这样一个程序
此程序分三大部分,界面显示、数据区(比如一个100维数组)、通信程序
通信程序将得到的数据放到数据结构 里面,然后 界面显示部分从数据区取得数据,
这样 只要通信程序里面有新数据,我就放到这个数组里,
这样的话如果 要更新界面显示,应该如何做呢?如果设定一个定时器,是不是 太占用资源了,
大家都用什莫办法了?

数据更新后发消息吧,这样方便些。。

如果数据量比较大,LOG时界面会很慢。我有过类似的经验,不知道是否跟你的问题相同。
我在收到数据包的时候m_wndView.setRedraw(False);这个包处理完毕的时候再m_wndView.setRedraw(True).
一个包更新一次界面,就解决了这个问题。

http://www.skinEx.cn

Tags: , , ,

[AppFace][界面][优化]AppFace界面优化的问题用了AppFace的使用版在本机界面优化正常但是把整个工程拷在别的机器上运行却只显示没被优化的界面

07月 13th, 2008 by admin
Posted in VC/MFC | No Comments »

    AppFace界面优化的问题,用了AppFace的使用版,在本机界面优化正常,但是把整个工程拷在别的机器上运行却只显示没被优化前的界面?
      但是安装ADUK后又能正常显示了,而且删除后也能正常显示,为什么呢?跟环境有关么?郁闷?

     
 

  可能就如刘大官人所说,就算这样那要怎么解决呢,我要程序在别的机器上都能用,而且不必安装ADUK。
    或许有什么更好的 办法?

需要交钱注册才可以,要不自己破解吧……..

使用 skinfeature 界面换肤组件

http://www.skinfeature.com

Tags: , , ,