關於MFC將乙個窗體嵌入另乙個窗體的方法

2021-06-23 10:01:59 字數 1458 閱讀 7350



將乙個窗體(子窗體)嵌入另乙個窗體(父窗體),也就是相當於把乙個窗體當成控制項,放入另乙個窗體中

現在用的比較多的方法是將子窗體的窗體屬性中的border設為none,style設為child,在父窗體類中實現就行

cpage *m_page = new cpage();

m_page->create(m_page::idd,this);

crect re;

getdlgitem(idc_picture).getwindowrect(&re);//idc_picture是在父窗體中放置的picturectrl控制項,確定子窗體位置用的

screentoclient(re);

m_page->movewindow(re);

m_page->showwindow(sw_show);

這是比較普遍,而且簡單的方法,但是有時候子窗體可能在別的地方還需要單獨呼叫,而且是帶邊框的形式,這種就很頭疼,總不能說建兩個窗體吧。網上相關問題的帖子也挺多,但是都沒有具體可靠的方法,最近解決了相關的問題,廢話不多說

cpage *m_page = new cpage();

m_page->create(m_page::idd,this);

m_page->setparent(this);//這句必須加,要不然子窗體就不在父窗體內

dword dw = ::getwindowlong(m_page->m_hwnd,gwl_style);

dw = dw&~ws_popup;//取消彈出式窗體屬性

dw = dw&~ws_caption;//取消標題欄

dw = dw&~ws_thickframe;//取消拖動改變大小

dw = dw|ws_child;//屬性必須設為ws_child

::setwindowlong(m_page->m_hwnd,gwl_style,dw);

dw = ::getwindowlong(m_page->m_hwnd,gwl_exstyle);

dw = dw&~ws_ex_dlgmodalframe;//去掉雙邊框的擴充套件屬性

::setwindowlong(m_page->m_hwnd,gwl_exstyle,dw);

crect re;

this->getwindowrect(re);

screentoclient(re);

//m_page->setwindowpos(&cwnd::wndtopmost,0,0,re.width()-20,re.height()-40,swp_nomove);

m_page->movewindow(0,0,re.width()-20,re.height()-40);//用movewindow和setwindowpos都可以

m_page->showwindow(sw_show);

好了,就這麼多,方法挺簡單的,只不過沒有系統的介紹

C 乙個窗體呼叫另乙個窗體的方法

乙個窗體呼叫另乙個窗體的方法 例如 窗體b要呼叫窗體a中的方法 1 首先在窗體a中將窗體a設為靜態窗體 public static forma m forma 設此窗體為靜態,其他窗體可呼叫此窗體中的方法 2 然後在此窗體a的建構函式中加入 m forma this public forma ini...

另乙個自己

人們常說 人貴有自知之明 可是話說回來,又有幾人能真正的了解自己呢?我覺得我就是乙個很沒有自知之明的人。生於89年的我,到了今年的生日就28周歲了。都說三十而立,正所謂成家立業,可以回過頭發現自己可以稱得上 一無是處,一無所有 曾幾何時,還是鄰居家叔叔阿姨教育孩子的榜樣 曾幾何時父母因為自己考個好大...

委託事件實現乙個窗體向另乙個窗體傳值

委託事件實現乙個窗體向另乙個窗體傳值 利用委託和事件可以方便地在乙個窗體上讓另乙個窗體執行某個操作,並且還能把這個窗體的值傳到另乙個窗體。傳值利用事件的引數。大概這樣寫 frm1 public partial class frmrowaddsetting form eventhandler temp...