No you didn't. I said add WS_CLIPSIBLINGS to the button. You have instead
added it to the child window that is launched when the button is clicked.
John:
Here is an even more simplified sample of the code (3 small files)...
I don't think I can simplify it more than this, I know that you
understand the problem I am having and probably don't need this
sample, but I will post it anyways with your reccomendations of your
last post! If you don't need to see it, well then that's okay too.
What happens now is that the button pops up from the window behind
onto the top window(child window) as soon as the child window is
opened. Basically its the same problem, just to make sure you can
skimp down to the following line in the code sample below to check
that I did this right, see the line that I flaged by the following
symbol (//*H*H*H*). The lines following this symbol is where I have
done your changes.
Yes you are right, mayby Onwed windows could be a better choice, I
have never used this, however, I should be getting back to continuing
Petzold's book by September and I will surely run into this, but for
now I must show some functionality between my hardware and VC++, and
was trying to use child windows as a temporary way out!
So I did put the code you sugested as so:
else if (LOWORD(wParam) == WindowButtons[1].MW_btC_ID)
//CREATE CHILD WINDOW #2 WHEN BUTTON #2 PRESSED
hdCWdws[0] = CreateWindow( szCW2_ClassName,szCW2_Name,
WS_CHILD | WS_CAPTION |WS_CLIPSIBLINGS, // | WS_SYSMENU
10, 10, 700, 450,hwnd,(HMENU)CW2_ID,
(HINSTANCE) GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
BringWindowToTop(hdCWdws[0]);
==================================================
Here is the whole code exactly as I have it now:
=============================================Main.cpp==
#include <windows.h>
//DECLARE CALLBACKS
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WndProc_CW2 (HWND, UINT, WPARAM, LPARAM);
//Name and class name of main window
static TCHAR *szMW_Name = TEXT ("MAIN WINDOW");
static TCHAR szMW_ClassName[] = TEXT ("MW");
//Class name of Child window #2
static TCHAR szCW2_ClassName[] = TEXT("CW2");
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInnstance,
PSTR szCmdLine, int iCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
//-Main Window CONFIGURATION
wndclass.style = CS_HREDRAW |CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szMW_ClassName;
//-REGISTRATION
RegisterClass (&wndclass);
//-CHILD WINDOW #2 CONFIGURATION
wndclass.style = CS_HREDRAW |CS_VREDRAW;
wndclass.lpfnWndProc = WndProc_CW2;
wndclass.hIcon = LoadIcon (NULL, IDI_EXCLAMATION);
wndclass.hIcon = NULL;
wndclass.lpszClassName = szCW2_ClassName;
//-REGISTRATION
RegisterClass(&wndclass); //Programming GUI
//-CREATE MAIN APPLICATION WINDOW
hwnd = CreateWindow (szMW_ClassName,szMW_Name,
WS_OVERLAPPEDWINDOW,
20, 20, 750, 550, NULL,NULL, hInstance, NULL);
//SetWindowPos(hwnd,HWND_NOTOPMOST,20, 20,750, 550,SWP_NOMOVE);
ShowWindow(hwnd, iCmdShow);
UpdateWindow (hwnd);
while (GetMessage (&msg, NULL, 0, 0)) //Window's queue loop
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
}
=====================================================
===========================================WndProc
#include <windows.h>
struct hdMW_WindowButtonsTAG
{
int iCTL_idx;
TCHAR *szMW_btC_Name;
int MW_btC_RectLeft;
int MW_btC_RectTop;
int MW_btC_RectRight;
int MW_btC_RectBottom;
int MW_btC_ID;
};
#define CW2_ID 2
//Child window ID
static TCHAR *szCW2_Name = TEXT("Programming GUI");//Child window
title bar name
extern TCHAR szCW2_ClassName[] = TEXT("CW2"); //Child window class
name
LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
int i;
//MAIN WINDOW CONTROL PROPERTIES
hdMW_WindowButtonsTAG WindowButtons[] =
{
1,TEXT("< EXIT >"),650,450,80,40,1,
2,TEXT("< GUI >"),200,30,180,30,2,
};
static HWND hdCWdws[1]; //Child window handle(s)
static HWND hdMW_WindowButtons[2]; //Button control handles
HDC hdc;
switch(message)
{
case WM_CREATE:
hdc = GetDC(hwnd);
//MAIN WINDOW BUTTON CONTROLS
for(i=0;i<2;i++)
{
hdMW_WindowButtons[i] = CreateWindow(
TEXT ("button"),WindowButtons[i].szMW_btC_Name,
WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON ,
WindowButtons[i].MW_btC_RectLeft,
WindowButtons[i].MW_btC_RectTop,
WindowButtons[i].MW_btC_RectRight,
WindowButtons[i].MW_btC_RectBottom,
hwnd,(HMENU)WindowButtons[i].MW_btC_ID,
(HINSTANCE) GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
}
ReleaseDC(hwnd,hdc);
return 0;
case WM_COMMAND:
//IF EXIT BUTTON CLICKED THEN EXIT APPLICATION
if (LOWORD(wParam) == WindowButtons[0].MW_btC_ID)
{
DestroyWindow(hwnd); //End application
}
//*H*H*H*
else if (LOWORD(wParam) == WindowButtons[1].MW_btC_ID) //CREATE CHILD
WINDOW #2 WHEN BUTTON #2 PRESSED
hdCWdws[0] = CreateWindow(
szCW2_ClassName,szCW2_Name,
WS_CHILD | WS_CAPTION |WS_CLIPSIBLINGS,
10, 10, 700, 450,hwnd,(HMENU)CW2_ID,
(HINSTANCE) GetWindowLong (hwnd,GWL_HINSTANCE),NULL);
//SetWindowPos(hdCWdws[0],HWND_TOPMOST,10,10,700,450,SWP_NOMOVE);
BringWindowToTop(hdCWdws[0]);
//SHOW CHILD WINDOW #1
ShowWindow(hdCWdws[0],SW_SHOW);
return 0;
case WM_DESTROY:
//CLEAR ALL OBJECTS
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
=================================================
=========================================WndProc_CW2
#include <windows.h>
struct hdCW2_WindowButtonsTAG
{
int iCTL_idx;
TCHAR *szMW_btC_Name;
int MW_btC_RectLeft;
int MW_btC_RectTop;
int MW_btC_RectRight;
int MW_btC_RectBottom;
int MW_btC_ID;
};
LRESULT CALLBACK WndProc_CW2(HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
int i;
//MAIN WINDOW CONTROL PROPERTIES
hdCW2_WindowButtonsTAG WindowButtonsCW2[] =
{
1,TEXT("< EXIT >"),580,350,80,40,200,
};
static HWND hdCW2_WindowButtons[1]; //Main window buttons
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(message)
{
case WM_CREATE:
hdc = GetDC(hwnd);
//MAIN WINDOW BUTTON CONTROLS
for(i=0;i<1;i++)
{
hdCW2_WindowButtons[i] = CreateWindow(
TEXT ("button"),WindowButtonsCW2[i].szMW_btC_Name,
WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON ,
WindowButtonsCW2[i].MW_btC_RectLeft,
WindowButtonsCW2[i].MW_btC_RectTop,
WindowButtonsCW2[i].MW_btC_RectRight,
WindowButtonsCW2[i].MW_btC_RectBottom,
hwnd,(HMENU)WindowButtonsCW2[i].MW_btC_ID,
(HINSTANCE) GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
}
ReleaseDC(hwnd,hdc);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
EndPaint(hwnd,&ps);
case WM_COMMAND:
//IF EXIT BUTTON CLICKED THEN EXIT APPLICATION
if (LOWORD(wParam) == WindowButtonsCW2[0].MW_btC_ID)
{
DestroyWindow(hwnd); //End application
}
return 0;
case WM_CLOSE: //Handler to do code on close
break;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
===================================================
Its funny, the button in the window behind the child window just keeps
poping up on the child widow which is on top!
Let me know what you think!
--
Best regards
Robert
"John Carson" wrote:
"Robby" <Robby@discussions.microsoft.com> wrote in message
news:2E1CC48E-9B72-4CE0-93C4-85A2F77526CA@microsoft.com
Hello,
If you are not familiar with the question of this post, you can get