将一个自定义控件与自定义类相关联.

翻译|其它|编辑:郝浩|2005-05-16 10:38:00.000|阅读 1402 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>



将一个自定义控件与自定义类相关联.
 

如何将Combobox控件与自定义控件相匹配,并让它能在视图中显
示出来?
 

下面提供几个步骤供参考:

1)看一下SubclasWindow().

2)你可以通过自定义类来完成此类任务.你所定义的是一个窗口类,所以要用
RegisterWinClass 为你的类选择一个唯一的名称.

其中可用这种方法来实现的:首先为该控件调用RegisterClass来准备一个窗口
过程. 这个窗口过程的目的是为了建立一个新的实例,并与窗口对象相匹配.

1).在类声明中加入下列的代码,比如在.h文件中

public:
static BOOL RegisterControlClass();
protected:
virtual void PostNcDestroy();
static LRESULT CALLBACK EXPORT WndProcHook(HWND, UINT, WPARAM, LPARAM);

2.在定义文件加入下列代码

LRESULT CALLBACK EXPORT
CYourComboClass::WndProcHook(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
// create new item and attach it
CYourComboClass* pCombo = new CDoorMon();
pCombo->Attach(hWnd);

// set up wndproc to AFX one, and call it
pCombo->m_pfnSuper = CYourComboClass::lpfnSuperEdit;
::SetWindowLong(hWnd, GWL_WNDPROC, (DWORD)AfxWndProc);

// then call it for this first message
#ifdef STRICT
return ::CallWindowProc(AfxWndProc, hWnd, msg, wParam, lParam);
#else
return ::CallWindowProc((FARPROC)AfxWndProc, hWnd, msg, wParam, lParam);
#endif
}

void CYourComboClass::PostNcDestroy()
{
// needed to clean up the C++ CWnd object
delete this;
}

BOOL CYourComboClass::RegisterControlClass()
{
WNDCLASS wcls;

// check to see if class already registered
static const TCHAR szClass[] = _T("YOURCOMBOCLASSNAME");
if (::GetClassInfo(AfxGetInstanceHandle(), szClass, &wcls))
{
// name already registered - ok if it was us
return (wcls.lpfnWndProc == (WNDPROC)CYourComboClass::WndProcHook);
}

// set new values
wcls.style = CS_SAVEBITS;
wcls.lpfnWndProc = CDoorMon::WndProcHook;
wcls.cbClsExtra = 0;
wcls.cbWndExtra = 0;
wcls.hInstance = AfxGetInstanceHandle();
wcls.hIcon = NULL;
wcls.hCursor = NULL;
wcls.hbrBackground = (HBRUSH)(1+COLOR_BACKGROUND);
wcls.lpszMenuName = NULL;
wcls.lpszClassName = szClass;
return (RegisterClass(&wcls) != 0);
}

然后从你的DllMain函数中调用CYourComboClass::RegisterControlClass.


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP