目的是通过在CDialog里面按一下添加按钮,就增加一个我定义MyButton(基类是CButton)。因为事先没有确定性,所以不可能再.h文件里面声明MyButton变量,只能在添加按钮的响应时间里面声明并显示。我记得有个方法可以实现这个的,但忘记了。。还有救是,MyButton的响应写在MyButton类里面是可以的吧?
解决方案 »
- 非模态对话框的一点小问题
- 请求各路高手帮忙:
- ADO数据连接错误
- 界面设计 高手们 请进!!
- 请问如何动态分割试图?关于DeleteView的问题。
- 哪里有漂亮的用于数据库的图标阿!!
- 关于线程中postmessage与view类句柄的获取
- 有个DLL,是一个COM的服务器,注册后,怎么在程序里使用呢?
- 请问,在内存中创建设备场景是不是用CreateCompatibleDC,创建后,怎么样往里画东西?
- 如何将一个可以滚动的窗口的全部内容转换为BMP保存起来(如:IE)?(提供线索就有分)欢迎参与成果供享!!!
- 请问DVD文件中的VOB文件格式是怎样的???
- VC ado 动态创建ACCESS 表,怎么做?
写错了,应该是:
ON_COMMAND_RANGE宏
.h
public:
afx_msg void OnBnClicked();
.cpp#define ID1 120
#define ID2 140BEGIN_MESSAGE_MAP(CButtonTestDlg, CDialog)
ON_COMMAND_RANGE(ID1,ID2, &CButtonTestDlg::OnMyButton)
END_MESSAGE_MAP()
报错:error C2440: 'static_cast' : cannot convert from 'void (__cdecl *)(void)' to 'void (__thiscall CCmdTarget::* )(UINT)'
.h里面的是
afx_msg void OnMyButton();
此法可行.但要保证你的按钮不要超出预定范围
========
还有"在添加按钮的响应时间里面声明并显示"这个问题,谁能帮忙解决下?好像是显示后用个什么方法就好的。
恩,是这样的,已经试好了。在onbtnclick()
{
MyButton button1;
CRect rect1(100,100,200,200);
button1.Create(L"222", WS_CHILD | WS_VISIBLE | WS_TABSTOP , rect1, this, 124 );
//..这里需要加一句什么话,可以使Button1显示出来??
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
不是这样的,是局部变量的原因。如果把button1在.h里面声明,就可以显示了。
现在在onbtnclick里面声明,等这个方法结束后,在里面声明的变量就被回收了,所以button1就没了。有个方法可以解决这个问题的,但我忘了
刚才去我认为应该用了这个的代码那里看了下,也没用到。
onbtnclick()
{
MyButton button1;
CRect rect1(100,100,200,200);
button1.Create(L"222", WS_CHILD | WS_VISIBLE | WS_TABSTOP , rect1, this, 124 );
//..这里需要加一句什么话,可以使Button1显示出来?? return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
就一句话的,
就是在控件用之后,加一句话,button.xxxx()的。
莫非是以前用JAVA时候的方法
我也记得是这个,CButton里面也有的,不过,用了后报错了。
定义成指针真的就行了。。
本来想用VECTOR存的,结果声明称指针的,没放进去的也显示了。。
好了,都解决了,下帖贴出解决方法,然后等待结贴。
1,响应的解决办法。
可以用群响应,也就是RANGE吧。 这个响应就是一系列IDC对应同一个方法。
不过我写到MyButton类里面去了。重载了几个方法。2,局部按钮变量的显示。
声明为指针变量就可以显示了。
经测试,如果生命为MyButton button1;即便存在vector里面,也没用,还是不显示。