1. 程式人生 > >用控制元件子類化實現拖放顯示檔名編輯框時遇到的問題【基於對話方塊】

用控制元件子類化實現拖放顯示檔名編輯框時遇到的問題【基於對話方塊】

控制元件子類化的步驟:

為控制元件派生一個新類,在其中加上需要響應的訊息函式。

為DLG類新增控制元件派生類的物件,並在OnInitDialog中呼叫XXX.SubClassDlgItem(IDC_XXX,this);


由於需要實現拖放檔案功能,所以在EDIT控制元件初始化時需要呼叫下面這條語句

    DragAcceptFiles(TRUE);

但是我發現把它新增在OnCreate中,它不會被執行的。原因是由資源編輯器新增的EDIT控制元件不能響應WM_CREATE。至於什麼原因,還不是很清楚。


這時候可以把初始化語句新增在另外一個函式中:PreSubclassWindow這個函式將在子類化視窗時被呼叫,次序是在CWnd::Create或DDX_Control之後,這就是說,無論是動態的建立視窗例項還是使 用對話方塊模板建立,這個函式都將被呼叫

。PreSubclassWindow在視窗子類化建立後和視窗被顯示前被呼叫,換句話說,這是我們來做視窗初始化 的一個最好時機。


拖放編輯框的效果: