关于按钮的两个问题,希望高手帮忙解决!

时间:2020-12-10 19:56:19
(1)为什么我动态创建的按钮在第二次创建时老是出错?

//按钮ADD,压下按钮ADD增加一个按钮
CButton m_button[5];
for(int i=0;i<5;i++)
 m_button[i].create("按牛",WS_VISIBLE|....|BS_FLAT,
               CRrect(0+i*10,0+i*10,50+i*10,50+i*10),this,1000+i);
在运行的时候,第一次没有问题,第二次就出错了;而且按下创建的按钮也显示出错
为什么会这样?

(2)如何实现按钮在对话框上的拖放功能,就好像在VC环境下创建的按钮可以在对话框上拖来拖去的功能?是不是应用drag &drop。。。。。。。

10 个解决方案

#1


这写按钮的创建是在对话框上的某个按钮响应里面做的??

也就是说会重复调用

CButton m_button[5];
for(int i=0;i<5;i++)
 m_button[i].create("按牛",WS_VISIBLE|....|BS_FLAT,
               CRrect(0+i*10,0+i*10,50+i*10,50+i*10),this,1000+i);

这些东西??

那id重复了啊

#2


为什么一个按纽要创建2次?
你可以创建后,根据情况隐藏和显示啊。或者在第二次创建前,先删除,再创建。

#3


(1)为什么我动态创建的按钮在第二次创建时老是出错?
---------------------------------------------------
因为你创建地过了,第二次创建的时候窗口句柄已存在,所以会出错。或者此控件的相同ID已存在。

(2)如何实现按钮在对话框上的拖放功能,就好像在VC环境下创建的按钮可以在对话框上拖来拖去的功能?是不是应用drag &drop。。。。。。。
---------------------------------------------------
基本上使用画图功能实现

#4


同一个窗口中除了静态控件ID可以重复外其他控件ID不可有重复

#5


1.检查一下ID是否相同。
2如何实现按钮在对话框上的拖放功能,有这个功能吗?系统没有提供啊。

#6


第一个问题我已经解决了,它问题出现在按钮已经创建,因为当时我按钮创建时候,按健的窗体大小没有设置好,所以没有显示出来所有的按钮,其实是已经创建了。这样在在已经创建按钮后再创建的话,因为窗体已经创建,id号重复,所以出现错误。
那第二个问题,在编程中式怎么实现的?
是用OnMouseMove()事件中编程吗,那是不是要不断的调用Indivate()?那样画面会不会有闪烁现象
还想问一下:怎么获取控件在客户区的位置
我使用GetWindowRect()获取对话框窗口位置和控件位置,然后相减取得的,但是这里面有点小问题,那么因为对话框窗口的位置包含标题栏 工具栏高度,而控件的位置只是客户区的位置,这多余部分怎么取得?

#7


要实现这样的功能,你可以像vc++开发环境那样,把按钮当成一个CStatic对象创建出来,然后在鼠标消息响应函数里,移动CStatic对象的位置

#8


自己响应鼠标消息来移动按钮应该可以。

#9


在鼠标消息里用MOVEWINDOW来移动BUTTON吧。

#10


问题出现在按钮已经创建,在已经创建按钮后再创建的话,因为窗体已经创建,id号重复,所以出现错误。

#1


这写按钮的创建是在对话框上的某个按钮响应里面做的??

也就是说会重复调用

CButton m_button[5];
for(int i=0;i<5;i++)
 m_button[i].create("按牛",WS_VISIBLE|....|BS_FLAT,
               CRrect(0+i*10,0+i*10,50+i*10,50+i*10),this,1000+i);

这些东西??

那id重复了啊

#2


为什么一个按纽要创建2次?
你可以创建后,根据情况隐藏和显示啊。或者在第二次创建前,先删除,再创建。

#3


(1)为什么我动态创建的按钮在第二次创建时老是出错?
---------------------------------------------------
因为你创建地过了,第二次创建的时候窗口句柄已存在,所以会出错。或者此控件的相同ID已存在。

(2)如何实现按钮在对话框上的拖放功能,就好像在VC环境下创建的按钮可以在对话框上拖来拖去的功能?是不是应用drag &drop。。。。。。。
---------------------------------------------------
基本上使用画图功能实现

#4


同一个窗口中除了静态控件ID可以重复外其他控件ID不可有重复

#5


1.检查一下ID是否相同。
2如何实现按钮在对话框上的拖放功能,有这个功能吗?系统没有提供啊。

#6


第一个问题我已经解决了,它问题出现在按钮已经创建,因为当时我按钮创建时候,按健的窗体大小没有设置好,所以没有显示出来所有的按钮,其实是已经创建了。这样在在已经创建按钮后再创建的话,因为窗体已经创建,id号重复,所以出现错误。
那第二个问题,在编程中式怎么实现的?
是用OnMouseMove()事件中编程吗,那是不是要不断的调用Indivate()?那样画面会不会有闪烁现象
还想问一下:怎么获取控件在客户区的位置
我使用GetWindowRect()获取对话框窗口位置和控件位置,然后相减取得的,但是这里面有点小问题,那么因为对话框窗口的位置包含标题栏 工具栏高度,而控件的位置只是客户区的位置,这多余部分怎么取得?

#7


要实现这样的功能,你可以像vc++开发环境那样,把按钮当成一个CStatic对象创建出来,然后在鼠标消息响应函数里,移动CStatic对象的位置

#8


自己响应鼠标消息来移动按钮应该可以。

#9


在鼠标消息里用MOVEWINDOW来移动BUTTON吧。

#10


问题出现在按钮已经创建,在已经创建按钮后再创建的话,因为窗体已经创建,id号重复,所以出现错误。