Hallo,
ich habe lange gegoogled und die MSDN gelesen bis sie mir zu den ohren rauskommt und komme nach 2 stunden suche einfach nicht weiter, da mir mein Problem ziemlich suspekt vorkommt habe ich mich dazu entschlossen es hier zu posten, obwohl ich mir langsam vorkomme als würde ich das Forum zuspammen.
Wie dem auch sei.
Ersteinmal hier ein Screenshot, wie das ganze aktuell aussieht um mein Problem näher beschreiben zu können: Screenshot
Ich habe also einmal das Hauptfenster mit dem Menü "Options". Dahinter verbirgt sich ein Dialog mit einer CALLBACK Funktion namens ConDlgProc.
Wie man erkennen kann wird nach einem Klick auf den Button der Dialog mit dem Handle "hCon" geschlossen und schließlich eine Funktion namens "NewWindow" aufgerufen.
Man kann erkennen, dass ich ein Neues Kindfenster erstelle, welches, wie auf dem Screenshot erkennbar, auch wenn ich die Titelleister anklicke, nicht fokusiert wird.
Doch das ist nicht mein einziges Problem. In einer weiteren Funktion namens WndProcChild, die zum eben erstellten Kindfenster gehört, erstelle ich eine EditBox, die ein Kind vom Kindfenster darstellt und die weder angezeigt wird noch sonst irgendetwas tut. Mein Versuch mit SetForeground das Problem irgendwie zu lösen bleibt vergebens.
Ich bin leider noch ein Laie in Sachen WinAPI, aber konnte zu diesem Problem über Google und die MSDN einfach keine Lösung finden.
Ich möchte mich entschuldigen, falls ich zuviel poste, aber ich bin halt nur in diesem Board Mitglied und nirgendwo anders. Außerdem kenne ich auch keine Anderen Programmierer und kann daher auch nirgends sonst Rat einholen.
Wie auch immer. Vielen Dank im Voraus ^^
eqw0uL
ich habe lange gegoogled und die MSDN gelesen bis sie mir zu den ohren rauskommt und komme nach 2 stunden suche einfach nicht weiter, da mir mein Problem ziemlich suspekt vorkommt habe ich mich dazu entschlossen es hier zu posten, obwohl ich mir langsam vorkomme als würde ich das Forum zuspammen.
Wie dem auch sei.
Ersteinmal hier ein Screenshot, wie das ganze aktuell aussieht um mein Problem näher beschreiben zu können: Screenshot
Ich habe also einmal das Hauptfenster mit dem Menü "Options". Dahinter verbirgt sich ein Dialog mit einer CALLBACK Funktion namens ConDlgProc.
Code:
BOOL CALLBACK ConDlgProc (HWND hCon, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
return (TRUE);
case WM_DESTROY:
case WM_CLOSE:
EndDialog(hCon,0);
break;
case WM_COMMAND:
if(HIWORD(wParam) == BN_CLICKED)
{
EndDialog(hCon,0);
NewWindow();
}
break;
default:
return (FALSE);
}
return 0;
}
Wie man erkennen kann wird nach einem Klick auf den Button der Dialog mit dem Handle "hCon" geschlossen und schließlich eine Funktion namens "NewWindow" aufgerufen.
Code:
void NewWindow()
{
const char szAppName[] = "bla";
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProcChild;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = (HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); /* std LTGRAY_BRUSH */
wc.lpszClassName = szAppName;
wc.lpszMenuName = NULL;
wc.lpszMenuName = MAKEINTRESOURCE(IDR_MYMENU);
RegisterClass(&wc);
hChServer[1][1] = CreateWindow(wc.lpszClassName,
(LPCTSTR) wc.lpszClassName,
WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW ,
CW_USEDEFAULT, CW_USEDEFAULT,
400, 210,
hWnd,
(HMENU)1,
(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),
NULL);
ShowWindow(hChServer[1][1], SW_SHOW);
SetFocus(hChServer[1][1]);
SetForegroundWindow(hChServer[1][1]);
}
Man kann erkennen, dass ich ein Neues Kindfenster erstelle, welches, wie auf dem Screenshot erkennbar, auch wenn ich die Titelleister anklicke, nicht fokusiert wird.
Doch das ist nicht mein einziges Problem. In einer weiteren Funktion namens WndProcChild, die zum eben erstellten Kindfenster gehört, erstelle ich eine EditBox, die ein Kind vom Kindfenster darstellt und die weder angezeigt wird noch sonst irgendetwas tut. Mein Versuch mit SetForeground das Problem irgendwie zu lösen bleibt vergebens.
Code:
LRESULT CALLBACK WndProcChild(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND hChChEdit;
switch (message)
{
case WM_CREATE:
{
hChChEdit = CreateWindow("EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL |
ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,
20, 20, 100, 100, hChServer[1][1], NULL,
(HINSTANCE)GetWindowLong(hChServer[1][1], GWL_HINSTANCE),
NULL);
SetForegroundWindow(hChChEdit);
SendMessage(hChChEdit, WM_SETTEXT, 0, (LPARAM) "Hello my brave new World, what's going on ? ;)");
ShowWindow(hChChEdit, SW_SHOW);
}
break;
case WM_SIZE:
{
MoveWindow(hChChEdit,
0, 0,
LOWORD(lParam),
HIWORD(lParam),
TRUE);
return 0;
}
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
}
break;
case WM_PAINT:
{
}
break;
case WM_CLOSE:
DestroyWindow(hChServer[1][1]);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
return 0;
}
Ich bin leider noch ein Laie in Sachen WinAPI, aber konnte zu diesem Problem über Google und die MSDN einfach keine Lösung finden.
Ich möchte mich entschuldigen, falls ich zuviel poste, aber ich bin halt nur in diesem Board Mitglied und nirgendwo anders. Außerdem kenne ich auch keine Anderen Programmierer und kann daher auch nirgends sonst Rat einholen.
Wie auch immer. Vielen Dank im Voraus ^^
eqw0uL