Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win


C++Builder: How to dynamically create a control using (HWND ParentWindow) constructor?

Posted on 2000-03-09
Medium Priority
Last Modified: 2010-04-04
The documentation says that the ParentWindow constructor is used when the control, say a TButton, is parented by a non-VCL window.

What I really wanna do is to put a TButton on a MS Visuall C++ CDialog.
But even when I try to dynamically create a TButton on my TForm within C++Builder using (HWD ParentWindow), I cannot get the button to show.

I know that normally we have to set the parent for the control for it to show. But when using ParentWindow, what do I need to do?

Thanks for a quick answer.

Question by:chrisyap
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3

Expert Comment

ID: 2603287
it is Delphi Forum. sorry I can't answer now before I study CB.
LVL 17

Expert Comment

ID: 2603368
it might be just the order in which events are done,look at this delphi example:
it will be easy enough to change to c++ builder,it puts a tbutton on the taskbar (by the clock).
so as long as you know correct hwnd of this dialog you should be able to do it.

procedure TForm1.FormCreate(Sender: TObject);
var h,hc : HWND;
h := FindWindow('Shell_TrayWnd',nil);
hc := FindWindowEx(h,0,'TrayNotifyWnd',nil);
cc := TEdit.Create(nil);
cc.Width := 60;
cc.Height := 30;
cc.Ctl3D := true;
cc.Visible := true;
cc.ParentWindow := hc;
cc.OnClick := myClick;

procedure tform1.myClick(Sender : tobject);

Regards Barry
LVL 17

Expert Comment

ID: 2603372
sorry it puts a tedit on the taskbar not a tbutton,but shouldnt matter both should work similar.
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.


Author Comment

ID: 2603752
Thanks, Barry.
At least now I know that I'm on the right path.

One more thing:
How the heck do you use FindWindow?
Where can we find class names like 'Shell_TrayWnd'?
What class name should I use if I wanna find my form or my CDialog?


Author Comment

ID: 2603760
sorry, Barry. Didn't mean to reject your answer like that. Now only if you could answer me again....apologies.

LVL 17

Accepted Solution

inthe earned 800 total points
ID: 2605881

to find window class names you can use several differen utilities:
spy++ from microsoft (comes with some of there apps(ms visual c++ etc)
you can create your own program to do it in vb:

you can use winsight32 that comes with some versions of delphi & c++ builder.
or you can use sinfo :
(sinfo is very useful utility that i really recommend)

to use findwindow there are a few ways.
{note im not sure off hand but nil may be null in c++ builder}
if you know theclassname of window:
if you know the caption of the window:
if you know both :

this is not so good because notepads main classname is the same as the program name(this is unusual) anyway here an example:
h : hwnd;
h := findwindow('notepad','notepad - untitled document');

note if you want to get to the text control inside notepad this is second window level down so you start using findwindowex() passing like:
h : hwnd;
h := findwindow('notepad',nil);
h := findwindowex(h,0,'edit',nil);

('edit' is class name of the text control of notepad again a bad example not to be confused with TEdit ,i guess you understand ;-)
we passed the parent hwnd first,next param is always 0 (in delphi so you have to test that in c++)but then the class name were after and you could also pass last param as window caption if one exists but usualy not on child windows so again an nil/null is passed

if the window your after is 4-5 levels down you can keep using the findwindowex until proper window is found.
here is from win32.hlp:

HWND FindWindowEx(

    HWND hwndParent,      // handle to parent window
    HWND hwndChildAfter,      // handle to a child window
    LPCTSTR lpszClass,      // pointer to class name
    LPCTSTR lpszWindow      // pointer to window name



Identifies the parent window whose child windows are to be searched.
If hwndParent is NULL, the function uses the desktop window as the parent window. The function searches among windows that are child windows of the desktop.


Identifies a child window. The search begins with the next child window in the Z order. hwndChildAfter must be a direct child window of hwndParent, not just a descendant window.
If hwndChildAfter is NULL, the search begins with the first child window of hwndParent.
Note that if both hwndParent and hwndChildAfter are NULL, the function searches all top-level windows.


Points to a null-terminated string that specifies the class name or is an atom that identifies the class-name string. If this parameter is an atom, it must be a global atom created by a previous call to the GlobalAddAtom function. The atom, a 16-bit value, must be placed in the low-order word of lpszClass; the high-order word must be zero.


Points to a null-terminated string that specifies the window name (the window's title). If this parameter is NULL, all window names match.


Return Values

If the function succeeds, the return value is the handle to the window that has the specified class and window names.

well hope that explained ok,
ignore if its a bit erratic in places.
if you download sinfo it will help you understand the class name stuff better as it adds every windows class name to a tree view and when a window is selected via mouse it gives you the details etc..

Regards Barry

Author Comment

ID: 2610619
Thanks Barry. Will try it out!


Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…
We’ve all felt that sense of false security before—locking down external access to a database or component and feeling like we’ve done all we need to do to secure company data. But that feeling is fleeting. Attacks these days can happen in many w…
Suggested Courses

604 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question