子視窗(控制項)對齊類的實現(C 實現)

2021-03-31 13:02:36 字數 2276 閱讀 8267

//標頭檔案://

//檔名稱:alignability.h

//功能說明: 使你的視窗具有子視窗對齊能力。

//用法說明:1,在你的父視窗類中定義乙個對齊類物件(當然也可放在類外).如: calignability m_align;

//   2,為對齊類物件設定父視窗類的控制代碼。如: m_align.setparenthwnd(getsafehwnd()); (對於基於對話方塊的程式,在oninitdialog函式中呼叫。)

//   3,呼叫對齊類物件的addalignitem函式,傳入乙個子視窗控制代碼或id及對齊方式(對齊方式可用按位或運算子多選)。

//    如果對齊類物件中父視窗控制代碼及相應子視窗的控制代碼無效,或子視窗控制代碼並非父視窗的子視窗,函式呼叫將失敗。

//    如:rect eds = ; m_align.addalignitem(idc_edit_content, leftalign|topalign|rightalign|bottomalign, &eds);

//    (對於基於對話方塊的程式,在oninitdialog函式中呼叫。),在大部分情況下,你可以忽略addalignitem函式的最後乙個引數,    

//    這個引數是用來顯示設定相應子控制項的四邊到父視窗四邊的距離(以畫素為單位),這對於非設計期放置的子控制項的對齊設定很有用.

//   4,當你的視窗的子控制項需要對齊的時候,呼叫align函式。如:m_align.align(); (通常在父視窗的wm_size訊息處理函式中呼叫)。

#endif //alignability_h_

//實現檔案://

檔名稱:alignability.cpp

#include "alignability.h"

#include

#ifdef _debug

#undef this_file

static char this_file=__file__;

#define new debug_new

#endif

//// construction/destruction

//calignability::calignability(hwnd hwndparent/*=0*/)

:m_hwndparent(hwndparent)

calignability::~calignability()

bool calignability::addalignitem(int nsubwndid, int aligntype, rect* lpeds/* =0 */)

bool calignability::addalignitem(hwnd hwndchild, int aligntype, rect* lpeds/* =0 */)

rect subwndrect, parentwndrect;

::getclientrect(m_hwndparent, &parentwndrect);

if(::iswindow(hwndchild))

m_alignset.push_back(aligncfg(hwndchild, aligntype, orieds));

return true;

}return false;

}void calignability::align()

rect rect;

::getclientrect(m_hwndparent, &rect);

const int cxparent = rect.right - rect.left;

const int cyparent = rect.bottom - rect.top;

hwnd  hwndchild = 0;

for(long i=0, n=m_alignset.size(); i < n; ++i)

if(m_alignset[i].m_etype & topalign)

if(m_alignset[i].m_etype & rightalign)

if(m_alignset[i].m_etype & bottomalign)

::movewindow(hwndchild, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, true); 

}else} }

hwnd calignability::getparenthwnd() const

bool calignability::setparenthwnd(hwnd hwndparent)

return false;

}

C 子視窗呼叫父視窗控制項的委託實現

有時子窗體的操作需要實時呼叫父窗體中的控制項操作,比如在父窗體的文字框中顯示子窗體中的輸出 主窗體 csharp view plain copy mainform.cs public partial class mainform form private void button1 click obj...

C 子視窗呼叫父視窗控制項的委託實現

有時子窗體的操作需要實時呼叫父窗體中的控制項操作,比如在父窗體的文字框中顯示子窗體中的輸出 主窗體 csharp view plain copy mainform.cs public partial class mainform form private void button1 click obj...

C 中父視窗和子視窗之間實現控制項互操作

很多人都苦惱於如何在子窗體中操作主窗體上的控制項,或者在主窗體中操作子窗體上的控制項。相比較而言,後面稍微簡單一些,只要在主窗體中建立子窗體的時候,保留所建立子窗體物件即可。下面重點介紹前一種,目前常見的有兩種方法,基本上大同小異 第一種,在主窗體類中定義乙個靜態成員,來儲存當前主窗體物件,例如 然...