2012-04-04 11 views
2

Ich arbeite an einem Programm auf Basis von C++ und auch mit SiliconSoftware-Schnittstelle. , wie Sie aus dem beigefügten pisture sehen ich mit der C++ win32 Code, um das Hauptfenster leite, aber das Anzeigefenster mit Framegrabber inteface mit folgendem Code erstellt:C++ Win32: Anfügen eines untergeordneten Fensters an das Hauptfenster

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,""); 

aber ich möchte dieses Diplay Fenster öffnet mit innerhalb des Hauptfensters. Wie kann ich es tun? irgendeine Idee? enter image description here

+1

Dies ist kein natives Win32. Sie verwenden tatsächlich einig C++ Wrapper Sie besser haben zu spezifizieren –

+0

ich mein Projekt mit Visual Stadio erstellt, aber ich habe nicht die „Leeres Projekt“ Option verwendet, so dass das Hauptfenster wird von dem Visual Studio erstellt wurde ich nehme an, das das ist Code für das Fenster: BOOL InitInstance (HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; // Speichere Instanz Griff in unsere globale Variable hWnd = Create (szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (! HWnd) { Rückgabe FALSCH; } ShowWindow (hWnd, nCmdShow); UpdateWindow (hWnd); Rückgabe TRUE; } – user261002

+0

Es gibt keine Möglichkeit, ein Fenster anzuhängen, nachdem es erstellt wurde. Wenn der Frame-Grabber-API nicht gibt Ihnen die Möglichkeit, dann bist du kein Glück. –

Antwort

4

Angenommen, Sie

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

haben assumig sie die nativen Griffe von Geschwister Fenster erhalten, egal wie sind. Um b ein Kind ein zu machen, müssen Sie

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); 

tun Nowm Sie WM_SIZE von a und b bewegen entsprechend zu behandeln haben, so dass er mit seinem (neu) Eltern die Größe zusammen.

Verwandte Themen