15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Edit control in Property sheets

Steven Youngs -- steve@ncgraphics.co.uk
Sunday, April 14, 1996

Environment: Win NT v3.51 and v4.0, VC++ v4.0

  I'm trying to dynamically add an edit control to a CPropertySheet derived
class, but I cannot seem to get the sunken 3D border effect ala Windows 95

The snippet of code I have is as follows

BOOL CGLDiagnosticsSheet::OnInitDialog() 
{
BOOL bStatus = CPropertySheet::OnInitDialog();

m_pwndFormatNumber = new CEdit;
CRect rcEdit;  // rcEdit is filled in with some sensible numbers...
m_pwndFormatNumber->Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP |
ES_NUMBER, rcEdit, this, 0);
return (bStatus);
}

Using Spy++, this edit control has a style of 0x50012000.
Now if I add an edit control to one of the property pages, it also has a style of 
0x50012000 but, it *has* the sunken 3D border ;-)
So, the effect is presumably unrelated to the window style.
Anyone got any ideas how I can get the 3D border effect for my edit control??

Steve.



_____________
Steven Youngs
NC Graphics (Cambridge) Ltd.



Don.Irvine@net-tel.co.uk
Wednesday, April 17, 1996

[Mini-digest: 3 responses]

>   I'm trying to dynamically add an edit control to a CPropertySheet derived
> class, but I cannot seem to get the sunken 3D border effect ala Windows 95

If memory serves me right [it's been a while], it is an extended style
WS_EX_CLIENTEDGE which adds the 3D border to the window.

Don
-----From: Paul Jakoubek 

Steve,

I've used the CreatEx method to have access to the extended style WS_EX_CLIENTEDGE:

BOOL createEditReturn = CreateEx(
	WS_EX_CLIENTEDGE,	//	DWORD dwExStyle
	"EDIT",			//	LPCTSTR lpszClassName
	(LPCTSTR) NULL,		//	LPCTSTR lpszWindowName
	WS_BORDER | WS_TABSTOP | WS_VISIBLE | WS_CHILD,	//	DWORD dwStyle
	x, y, nWidth, nHeight,	//	int x, int y, int nWidth, int nHeight
        pWnd->GetSafeHwnd(),	//	HWND hwndParent
	(HMENU) nID,		//	HMENU nIDorHMenu
	NULL);					//	LPVOID lpParam = NULL

This seems to do the trick
-----From: Steven Youngs 

Thanks to you both for your suggestion. You both came up with =
WS_EX_CLIENTEDGE. I had in fact already tried this, but with no success. =
Anyway I tried again and have the solution which you may (or may not !!) =
be interested in. The problem is that I was calling pEdit->Create(...) =
but in fact you need to call CreateEx(....) in order to specify extended =
window styles. (CWnd::Create() passes in 0 as the extended window style)

Anyway, I changed=20

pEdit->Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP |=20
 	WS_EX_OVERLAPPEDWINDOW |
	ES_NUMBER,=20
	rcEdit, this, IDC_FORMATNUMBER);

to=20

pEdit->CreateEx(WS_EX_OVERLAPPEDWINDOW, _T("EDIT"),=20
		NULL,=20
		WS_CHILD | WS_VISIBLE | WS_TABSTOP |
		ES_NUMBER, rcEdit.left, rcEdit.top,
	 	rcEdit.Width(), rcEdit.Height(),
		this->GetSafeHwnd(),=20
		HMENU(IDC_FORMATNUMBER));


and it all works fine :-)

Scott: If there is nothing similar to this in the MFC FAQ, perhaps you =
could add it to save others the problem.

Thanks.
Steve.





| Вернуться в корень Архива |