-
May 25th, 2014, 10:49 AM
#1
Can't edit Edit control in DialogBox
This is a DialogBox without resource.
The OK button is working and I can get the text from the Edit box but I cannot write to it.
Code:
#include <windows.h>
#include <iostream>
using namespace std;
#define IDE_OK 111
#define IDE_EDIT 112
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK DialogProc(HWND, UINT, WPARAM, LPARAM);
void CreateDialogBox(HWND);
void RegisterDialogClass(HWND);
HINSTANCE ghInstance;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
MSG msg ;
HWND hwnd;
WNDCLASS wc = {0};
wc.lpszClassName = TEXT( "Window" );
wc.hInstance = hInstance ;
wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
wc.lpfnWndProc = WndProc;
RegisterClass(&wc);
hwnd = CreateWindow( wc.lpszClassName, TEXT("Window"),
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100, 100, 250, 150, NULL, NULL, hInstance, NULL);
ghInstance = hInstance;
while( GetMessage(&msg, NULL, 0, 0))
{
DispatchMessage(&msg);
}
return (int) msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
RegisterDialogClass(hwnd);
CreateWindow(TEXT("button"), TEXT("Show dialog"),
WS_VISIBLE | WS_CHILD ,
20, 50, 95, 25,
hwnd, (HMENU) 1, NULL, NULL);
break;
case WM_COMMAND:
CreateDialogBox(hwnd);
break;
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
LRESULT CALLBACK DialogProc(HWND hwnd, UINT msg,
WPARAM wParam,
LPARAM lParam)
{
char Pass[255];
switch(msg)
{
case WM_CREATE:
CreateWindow(TEXT("button"), TEXT("Ok"),
WS_VISIBLE | WS_CHILD ,
50, 50, 80, 25,
hwnd, (HMENU) IDE_OK, NULL, NULL);
CreateWindow(TEXT("edit"), "pass",
WS_CHILD | WS_VISIBLE | WS_BORDER,
50, 20, 80, 25,
hwnd, (HMENU) IDE_EDIT, NULL, NULL);
break;
case WM_COMMAND:
if (wParam==IDE_OK)
{
GetDlgItemText(hwnd, IDE_EDIT, Pass, 260);
}
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
}
return (DefWindowProc(hwnd, msg, wParam, lParam));
}
void RegisterDialogClass(HWND hwnd)
{
WNDCLASSEX wc = {0};
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = (WNDPROC) DialogProc;
wc.hInstance = ghInstance;
wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
wc.lpszClassName = TEXT("DialogClass");
RegisterClassEx(&wc);
}
void CreateDialogBox(HWND hwnd)
{
CreateWindowEx(WS_EX_DLGMODALFRAME | WS_EX_TOPMOST,
TEXT("DialogClass"), TEXT("Dialog Box"),
WS_VISIBLE | WS_SYSMENU | WS_CAPTION,
200, 200, 200, 150,
hwnd, NULL, ghInstance, NULL);
}
-
May 25th, 2014, 11:11 AM
#2
Re: Can't edit Edit control in DialogBox
Originally Posted by MasterDucky
... I can get the text from the Edit box but I cannot write to it.
What do you mean by "cannot write"?
Just set the input focus to this edit control and type in the text. Or use SetDlgItemText...
Victor Nijegorodov
-
May 25th, 2014, 01:27 PM
#3
Re: Can't edit Edit control in DialogBox
Your message loop isn't correct. See http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Code:
BOOL bRet;
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
You need TranslateMessage() to handle chars etc.
All advice is offered in good faith only. All my code is tested (unless stated explicitly otherwise) with the latest version of Microsoft Visual Studio (using the supported features of the latest standard) and is offered as examples only - not as production quality. I cannot offer advice regarding any other c/c++ compiler/IDE or incompatibilities with VS. You are ultimately responsible for the effects of your programs and the integrity of the machines they run on. Anything I post, code snippets, advice, etc is licensed as Public Domain https://creativecommons.org/publicdomain/zero/1.0/ and can be used without reference or acknowledgement. Also note that I only provide advice and guidance via the forums - and not via private messages!
C++23 Compiler: Microsoft VS2022 (17.6.5)
-
May 25th, 2014, 01:49 PM
#4
Re: Can't edit Edit control in DialogBox
Originally Posted by 2kaud
That was it. Thank you 2kaud that made my day!
@Victor
No, it wasn't working apparently because of this. Thanks though.
-
May 26th, 2014, 08:18 AM
#5
Re: Can't edit Edit control in DialogBox
There is, however, no need to check for failure, see: When will GetMessage return -1?
-
May 26th, 2014, 11:00 AM
#6
Re: Can't edit Edit control in DialogBox
Originally Posted by ReneK
IMO I'd stick with what Microsoft recommends on their official site for failure check. However, I usually code it as
Code:
BOOL bRet;
while ((bRet = GetMessage(&msg, NULL, 0, 0 )) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
If (bRet) {
//Deal with error
}
All advice is offered in good faith only. All my code is tested (unless stated explicitly otherwise) with the latest version of Microsoft Visual Studio (using the supported features of the latest standard) and is offered as examples only - not as production quality. I cannot offer advice regarding any other c/c++ compiler/IDE or incompatibilities with VS. You are ultimately responsible for the effects of your programs and the integrity of the machines they run on. Anything I post, code snippets, advice, etc is licensed as Public Domain https://creativecommons.org/publicdomain/zero/1.0/ and can be used without reference or acknowledgement. Also note that I only provide advice and guidance via the forums - and not via private messages!
C++23 Compiler: Microsoft VS2022 (17.6.5)
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|