Custom Control

VC里的Custom Control的使用很简单,用鼠标拖动到窗体上,然后设置其“Class”属性为已注册的窗口类,比哪Edit、Button等等。因为像Edit、Button等控件可以很容易的画到窗体上,而对继承于CWnd的自定义窗口类则没有办法直接用鼠标画到窗体上,这时Custom Control就用上了,只要类是使用RegisterClass注册后就能被使用,如:

view plaincopy to clipboardprint?
WNDCLASS wc;
wc.lpszClassName = _T("MyWindow"); // matches class name in client
wc.hInstance = hInstance;
wc.lpfnWndProc = ::DefWindowProc;
wc.hCursor = ::LoadCursor(NULL, IDC_ARROW);
wc.hIcon = 0;
wc.lpszMenuName = NULL;
wc.hbrBackground = (HBRUSH) ::GetStockObject(LTGRAY_BRUSH);
wc.style = CS_GLOBALCLASS; // To be modified
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;

::RegisterClass(&wc) != 0;

这时保存在CustomControl的Class属性上输入MyWindow后,程序运行正常。

其实我们可以不用这么“麻烦”的来使用自定义类。只一个SubclassWindow就搞定了。使用方法:

1:定义我们需要类,比如从CWnd继承一个新的类MyWindow、并编写自己的代码实现。

2:在窗体上放任何一个控件(目的是使用这个控件的大小及位置),比如可以放一个Static在窗体上。为控件添加一个变量,变量类型为MyWindow,然后在代码的合适的地方(比如OnInitDialog)添加如下的代码就可以了:

view plaincopy to clipboardprint?
this->m_MyWindow.SubclassWindow(this->GetDlgItem(IDC_Static)->GetSafeHwnd());

直接运行程序,绝不会出现CustomControl那种运行不起来的现象。

你可能感兴趣的:(null,Class,button)