诡异的问题,控件用过之后就不可以在编译

wenluderen 2014-06-15 04:33:46
目的:做一个一个简单是时钟控件
IDE是VS2010 系统是WIn7 64位
第一步:使用向导创建Active控件
第二步:修改函数,见下图
void CGSZ1CLOCKCtrl::OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
if (!pdc)
return;

// TODO: 用您自己的绘图代码替换下面的代码。
//pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
//pdc->Ellipse(rcBounds);
CTime time =CTime::GetCurrentTime();
CString str = time.Format("%H:%M:%S");
pdc->TextOutW(0,0,str);
}


第三步:为 CGSZ1CLOCKCtr 添加消息函数
int CGSZ1CLOCKCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: 在此添加您专用的创建代码
SetTimer(1,1000,NULL);//定时器编号,1000MS,时间回调函数
return 0;
}

第四步:为 CGSZ1CLOCKCtr 添加消息函数
void CGSZ1CLOCKCtrl::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
Invalidate();//使窗口无效
COleControl::OnTimer(nIDEvent);
}

至此代码完成。

使用:
第一步:创建一个对话框程序
第二步:在对话框中插入创建的控件
第三步:编译运行
结果是



遇到的问题:
第一个问题:控件无法注册 。那是由于我开始的时候没有使用管理员权限运行VS2010

第二个问题:编译好的控件 使用过后 就不能修改。不然报错。我不知道解决方案


诡异啊!!!!!!!!
...全文
105 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ouyh12345 2014-06-16
  • 打赏
  • 举报
回复
第二个问题:控件的宿主进程没有清除掉
wenluderen 2014-06-16
  • 打赏
  • 举报
回复
上面两位老大说的都没错 后来我测试过了。 如果需要重新编译的话 需要将正在使用的 控件删除。并且重新编译代码(就是你使用控件的代码) 另外不能编译成功的问题 的确是需要以管理员权限 运行VS2010 如果还不行的 就重启VS2010
fishion 2014-06-16
  • 打赏
  • 举报
回复
没权限的,可以直接在开始菜单-运行里输入regsvr32 yourocx.ocx来注册 卸载用regsvr32 /u yourocx.ocx来注册
boylafong 2014-06-16
  • 打赏
  • 举报
回复
你的ocx插件没有完全关闭,比如你可以去删除下试试,会提示你该文件正在使用。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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