問題是這樣的:
在建立的MFC對話框工程中,使用.NET與MFC互操作,在一個MFC的對話框CMFC_C_CLIDemoDlg 中顯示一個.net的form窗體frm,由於需要顯示成非模態對話框樣式的Form,所以使用了frm->Show();的方法。
但是這樣創建的窗體frm在失去焦點後,窗體就消失了(不顯示在對話框的上層),經過測試發現,是因為在frm->Show()顯示窗體時,沒有指定對話框為它的父窗體。但是這裡如何將MFC的CDailog類型的對話框CMFC_C_CLIDemoDlg 指定為Form類型的窗體frm的父窗體呢?
如果不能指定,還有什麼辦法使frm失去焦點後,仍然顯示在對話框的上層?
代碼如下:
// CMFC_C_CLIDemoDlg 對話框
class CMFC__C_CLIDemoDlg : public CDialog
{
// 構造
public:
CMFC__C_CLIDemoDlg(CWnd* pParent = NULL); // 標准構造函數
// 對話框數據
enum { IDD = IDD_MFC__C_CLIDEMO_DIALOG };
```
```
};
namespace MFC__C_CLIDemo
{
public ref class WinForm : public System::Windows::Forms::Form
{
public:
WinForm(void)
{
InitializeComponent();
//
//TODO: 在此處添加構造函數代碼
//
}
}
//在MFC對話框中顯示form窗體
void CMFC__C_CLIDemoDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知處理程序代碼
WinForm ^frm=gcnew WinForm;
//frm->ShowDialog();
frm->Show();
}
一般API是用的SetParent函數,但是MFC和.net不是一個體系,只怕內部交融肯定不行,至少焦點是個問題