Есть ли что-то вроде GetDlgItemInt, кроме созданного окна? Win32 Api - PullRequest
0 голосов
/ 23 декабря 2010

Используя C ++ Win32 API, я создал окно (CreateWindow ()) вместо диалогового окна. Существуют ли какие-либо команды, подобные «GetDlgItemInt» или «SetDlgItemInt», которые используются для получения и установки данных в окне редактирования для Win 32 API? В противном случае мне придется создать диалоговое окно или кучу кода для преобразования INT в строку, а затем обратно.

Идея состоит в том, что пользователь задает ширину и высоту окна, печатая в двух диалоговых окнах редактирования в окне, которое я создал. Есть хорошие простые уроки, которые в основном рассказывают мне, как сделать это через диалоговое окно, но я хотел бы знать, есть ли подобные функции, которые я могу использовать, которые не зависят от диалогового окна?

Я надеюсь получить что-то подобное ...

xVal = 1280;
yVal = 720;
hwndResoX = CreateWindow("edit",xVal, WS_CHILD|WS_VISIBLE|WS_BORDER|ES_NUMBER,20,20,40,20, _hwnd, NULL, NULL, NULL);
hwndResoY = CreateWindow("edit",yVal, WS_CHILD|WS_VISIBLE|WS_BORDER|ES_NUMBER,80,20,40,20, _hwnd, NULL, NULL, NULL);

Но, как вы можете себе представить, я не могу использовать xVal или yVal в CreateWindow (), потому что получаю ошибку компиляции, в которой говорится, что я не могу преобразовать из INT в CHAR *

Ответы [ 2 ]

0 голосов
/ 12 апреля 2011

Вы можете использовать GetDlgItemInt, просто укажите int ID для параметра HMENU в CreateWindow.

0 голосов
/ 16 марта 2011

Простейший способ сделать это:

// Create the window. Note that for edits, the caption is not the same as its contents,
// so we leave that empty here:
hwndResoX = CreateWindow("edit","", WS_CHILD|WS_VISIBLE|WS_BORDER|ES_NUMBER,20,20,40,20, _hwnd, NULL, NULL, NULL);

// Now create a string to use to set as the content:
char content[32];
sprintf(content, "%d", xVal); // Recommend using StringCchPrintf if there's any chance that the buffer size might be too small
SetWindowText(hwndResoX, content);

См. Также эту страницу MSDN об использовании элементов управления редактированием.

Для возврата данных используйте GetWindowText, чтобы получитьстроку, затем анализируйте ее, используя любую функцию разбора строки на int, которую вы хотите (например, strtol, atoi, sscanf и т. д.)столько кода, всего пара лишних строк, и это намного меньше хлопот, чем преобразование в диалоговое окно.

Сказав, что если вы используете правильный диалог здесь, вы получите пару дополнительных преимуществ: особеннопользователь может автоматически переходить с одного поля на другое, что необходимо сделать, чтобы включить его без диалогового окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...