用控件子类化实现拖放显示文件名编辑框时遇到的问题【基于对话框】

版权声明:转载请注明出处,谢谢 https://blog.csdn.net/roccreed/article/details/7549316

控件子类化的步骤:

为控件派生一个新类,在其中加上需要响应的消息函数。

为DLG类添加控件派生类的对象,并在OnInitDialog中调用XXX.SubClassDlgItem(IDC_XXX,this);


由于需要实现拖放文件功能,所以在EDIT控件初始化时需要调用下面这条语句

    DragAcceptFiles(TRUE);

但是我发现把它添加在OnCreate中,它不会被运行的。原因是由资源编辑器添加的EDIT控件不能响应WM_CREATE。至于什么原因,还不是很清楚。


这时候可以把初始化语句添加在另外一个函数中:PreSubclassWindow这个函数将在子类化窗口时被调用,次序是在CWnd::Create或DDX_Control之后,这就是说,无论是动态的创建窗口实例还是使 用对话框模板创建,这个函数都将被调用。PreSubclassWindow在窗口子类化创建后和窗口被显示前被调用,换句话说,这是我们来做窗口初始化 的一个最好时机。


拖放编辑框的效果:




猜你喜欢

转载自blog.csdn.net/roccreed/article/details/7549316