用VC编写Actives遇到的问题。

aoyihuashao 2008-12-03 09:38:54
目的:写一个继承edit的组件,在鼠标点击这个组件的时候,会弹出一个对话框,对话框里面有个表,从表中选择数据,然后返回给EDIT显示出来。

问题:
1,建立工程后,工程名为selectfield,主要用于实现功能的类是CSelectFieldCtrl。在这个类中,OnClicked是在add virtual functions里面的,但是我加了这个方法后,里面的代码在点击edit的时候,并没有执行。为什么?

2,用LBUTTONUP事件,可以响应点击事件,实现上面的功能。代码如下:

void CSelectFieldCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
MessageBox("aaa");
CChooseDialog dialog;
dialog.DoModal();
COleControl::OnLButtonUp(nFlags, point);
}

问题是:在点击组件的时候,MessageBox("aaa");出现了,但是dialog没有出现,为什么?

3,添加了一个组件到工程后,当决定不用这个组件后,怎么把他从工程里删除。
...全文
112 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
aoyihuashao 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 oyljerry 的回复:]
完整的步骤:
一、新建成对话框程序gridtest,在对话框中加入ADO DataGrid控件。
二、加入ADO封装类。可从这里下载ADO2。H或AOD2。CPP
http://www.vckbase.com/document/viewdoc/?id=1164
三、在要使用到的主对话框中文件中加入代码

C/C++ code

Dlg.h //--------------------------------------------------- class CTestGridDlg : public CDialog { // Construction public: CADORecordset m_Rs;//新增变量…
[/Quote]

这个是数据库连接需要的啊,但是,我不连接数据库,不用adodc,只用datagrid,他还是不显示对话框啊。
oyljerry 2008-12-03
  • 打赏
  • 举报
回复
完整的步骤:
一、新建成对话框程序gridtest,在对话框中加入ADO DataGrid控件。
二、加入ADO封装类。可从这里下载ADO2。H或AOD2。CPP
http://www.vckbase.com/document/viewdoc/?id=1164
三、在要使用到的主对话框中文件中加入代码

C/C++ code

Dlg.h //--------------------------------------------------- class CTestGridDlg : public CDialog { // Construction public: CADORecordset m_Rs;//新增变量 CADODatabase m_DBCn;//新增变量 CTestGridDlg(CWnd* pParent = NULL); // standard constructor //------------------------------------------------------- Dlg


.cpp中

// TODO: Add extra initialization here


CString strConnection;
//strConnection.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;")
//_T("Data Source=note.mdb"));


strConnection.Format(_T("Provider=SQLOLEDB;Server=dataserver.;Database=youdb;uid=sa;pwd=youpassword"));

m_DBCn.Open((LPCTSTR)strConnection); //打开程序数据库
m_Rs.SetDatabase(&m_DBCn);
m_Rs.Open(_T("select * from yourtables;"));

m_ctrlDG.SetCaption(_T("单击列头进行排序"));//m_ctrlDG.为datagrid的变量。
m_ctrlDG.SetRefDataSource((LPUNKNOWN)m_Rs.GetRecordset());



四、在gridtest.cpp中的。BOOL CGridtestApp::InitInstance(){
//加入
AfxEnableControlContainer();
::CoInitialize(NULL);//加入COM初始化代码。

。。。


::CoUninitialize();//加入这句
return FALSE;
}
不做这四步。编译不会出错,运行时提示无效指针,数据库初始化出错什么。

总结这些是为了备忘。
aoyihuashao 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 Tinary3v0 的回复:]
OnClick事件需要一个控件ID作为参数,而你在测试容器里面没法给它制定ID所以测试不出来。

另外一个,应该不是你贴的那个代码的问题,应该在你的CChooseDialog本身创建的时候出现了问题。
调试跟踪一下 是不是在Creat或Initialdialog函数里面出现了错误。对话框创建不成功!
[/Quote]

CChooseDialog里面我一句代码也没写,都是MFC生成的。

只要插入了adodc或者datagrid就不能显示了,不知道为什么会这样。
Tinary3v0 2008-12-03
  • 打赏
  • 举报
回复
OnClick事件需要一个控件ID作为参数,而你在测试容器里面没法给它制定ID所以测试不出来。

另外一个,应该不是你贴的那个代码的问题,应该在你的CChooseDialog本身创建的时候出现了问题。
调试跟踪一下 是不是在Creat或Initialdialog函数里面出现了错误。对话框创建不成功!
yayafu 2008-12-03
  • 打赏
  • 举报
回复
ADO控件有问题,创建的时候可能失败了
aoyihuashao 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 oyljerry 的回复:]
3.从资源里删掉组件,并修改一些code
[/Quote]

好比我插入了datagrid这个控件,想不用他了,但他一直在那个组件面板里啊,就算代码里面一句也没设计到他,还是在组件面板里的。
aoyihuashao 2008-12-03
  • 打赏
  • 举报
回复
经过试验,
发现:
只要对话框里面加入ADO控件(adodc或者datagrid),就不会显示了,
怎么会这样啊。
oyljerry 2008-12-03
  • 打赏
  • 举报
回复
3.从资源里删掉组件,并修改一些code
oyljerry 2008-12-03
  • 打赏
  • 举报
回复
CChooseDialog dialog;
dialog.DoModal();
这个对话框Debug一下,看是不是OnInitDialog()有什么问题,导致对话框退出了
aoyihuashao 2008-12-03
  • 打赏
  • 举报
回复
我现在又试了下,


void CSelectFieldCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDialog dlgAbout1(IDD_SELECTDLG);
dlgAbout1.DoModal();
CDialog dlgAbout(IDD_ABOUTBOX_SELECTFIELD);
dlgAbout.DoModal();
COleControl::OnLButtonUp(nFlags, point);
}


这个代码,IDD_ABOUTBOX_SELECTFIELD 这个系统自带的aboutdlg居然显示了,但我的那个IDD_SELECTDLG还是没显示,DIALOG的属性页都改的一样了,就是不显示。
aoyihuashao 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ilovedrv 的回复:]
不应该啊,

MessageBox("aaa"); 响应了,说明消息处理正确

那应该就是你的CChooseDialog本身的问题了
[/Quote]


这个对话框是用MFC直接插入的啊,
然后就两句

CChooseDialog dialog;
dialog.DoModal();

这个产生对话框的步骤,写了N多次了,怎么会错呢?
aoyihuashao 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ghoster1985 的回复:]
1.OnClicked应该是在Add Windows Message Handles里添加的
[/Quote]


WM里面没有这个事件啊。。
ilovedrv 2008-12-03
  • 打赏
  • 举报
回复
不应该啊,

MessageBox("aaa"); 响应了,说明消息处理正确

那应该就是你的CChooseDialog本身的问题了
ghoster1985 2008-12-03
  • 打赏
  • 举报
回复
1.OnClicked应该是在Add Windows Message Handles里添加的
aoyihuashao 2008-12-03
  • 打赏
  • 举报
回复
救命啊。。。。。。。。。。。。。。。。。。。。。。
oyljerry 2008-12-03
  • 打赏
  • 举报
回复
AfxOleInit() 初始化

16,548

社区成员

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

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

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