Есть ли что-нибудь вроде GetDlgItemInt, кроме созданного окна? Win32 Api

Используя 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 *


person ChiggenWingz    schedule 23.12.2010    source источник
comment
Я действительно не понимаю вашего вопроса. Вы начинаете с разговора о GetDlgItemInt, а затем показываете код, который содержит только вызов CreateWindow? В любом случае API GetDlgItemInt будет работать для любого окна hwnd при условии, что у окна hwnd есть дочерний элемент с указанным идентификатором.   -  person mrsheen    schedule 06.01.2011


Ответы (2)


Самый простой способ сделать это:

// 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 для получения строки, затем проанализируйте ее, используя любую функцию синтаксического анализа между строками, которые вы хотите (например, strtol, atoi, sscanf и т. Д.)

Хотя вам нужно вручную преобразовать между int и string, это не так уж много кода, всего пара дополнительных строк, так что гораздо меньше хлопот, чем преобразование для использования диалогового окна.

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

person BrendanMcK    schedule 15.03.2011

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

person Brian    schedule 12.04.2011