2012-04-04 5 views
2

Je travaille sur une base de programme en C++ et en utilisant également l'interface SiliconSoftware. que vous voyez de la pisture ci-joint je me présente la fenêtre principale avec le C++ code win32, mais la fenêtre d'affichage est créé avec carte d'acquisition inteface avec le code suivant:C++ Win32: Attacher une fenêtre enfant à la fenêtre principale

int Bits=8; int nId =::CreateDisplay(Bits,GrabberOptions::getWidth(),GrabberOptions::getHeight());SetBufferWidth(nId,GrabberOptions::getWidth(),GrabberOptions::getHeight());::DrawBuffer(nId,Fg_getImagePtrEx(fg,lastPicNr,0,_memoryAllc),lastPicNr,""); 

mais je veux cette fenêtre Diplay, ouvert avec dans la fenêtre principale. Comment puis-je le faire? une idée? enter image description here

+1

Ce n'est pas natif Win32. Vous utilisez actuellement un wrapper C++ que vous devez spécifier –

+0

J'ai créé mon projet avec Visual Stadio, mais je n'ai pas utilisé l'option "Empty Project", donc la fenêtre principale a été créée par Visual Studio. code pour la fenêtre: BOOL InitInstance (HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; // Stocker le handle d'instance dans notre variable globale hWnd = CreateWindow (szWindowClass, szTitre, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (! HWnd) { return FALSE; } ShowWindow (hWnd, nCmdShow); UpdateWindow (hWnd); return VRAI; } – user261002

+0

Il n'y a aucun moyen de "joindre" une fenêtre après sa création. Si l'API frame grabber ne vous donne pas l'option, vous n'avez pas de chance. –

Répondre

4

Disons que vous avez

HWND a = ... 
HWND b = ... 

assumig ils sont les poignées natives de fenêtre frères et soeurs obtenu peu importe comment. Pour faire b un enfant d'un, vous devez faire

Setparent(b,a); //a will be the new parent b 
DWORD style = GetWindowLong(b,GWL_STYLE); //get the b style 
style &= ~(WS_POPUP|WS_CAPTION); //reset the "caption" and "popup" bits 
style |= WS_CHILD; //set the "child" bit 
SetWindowLong(b,GWL_STYLE,style); //set the new style of b 
RECT rc; //temporary rectangle 
GetClientRect(a,&rc); //the "inside border" rectangle for a 
MoveWindow(b,rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top); //place b at (x,y,w,h) in a 
UpdateWindow(a); 

Nowm vous devez gérer WM_SIZE d'un et se déplacer b en conséquence, de sorte qu'il redimensionne avec son parent (nouveau).

Questions connexes