У вас есть несколько вариантов: -
- Создать родительский контроль и иметь ребенок без рамки управления редактирования текста внутри него
- Подкласса управления редактированием текста и перегружать NC_PAINT нарисовать границу
ОБНОВЛЕНИЕ
После того, как возиться с программой образца, она постепенно рассветал на мне, что элементы управления редактированием подкласса не работают, и проверка он-лайн подтверждает это (благодарю MS за то, что вы так последовательны!).
Так что просто оставляет вариант 1 и вариант 3 (только мысль об этом):
- Создать свой собственный контроль редактировать
Вот пример метода 1:
#include <windows.h>
LRESULT __stdcall EditboxProc (HWND window, unsigned message, WPARAM w_param, LPARAM l_param)
{
bool
use_default = true;
LRESULT
result = 0;
switch (message)
{
case WM_CREATE:
{
RECT
client;
GetClientRect (window, &client);
HWND
edit = CreateWindowEx (0,
TEXT ("Edit"),
0,
WS_VISIBLE | WS_CHILD,
10,
10,
client.right - 20,
client.bottom - 20,
window,
0,
GetModuleHandle (0),
0);
SetWindowLongPtr (window, GWLP_USERDATA, static_cast <LONG> (reinterpret_cast <LONG_PTR> (edit)));
}
break;
case WM_SIZE:
{
RECT
client;
GetClientRect (window, &client);
SetWindowPos (reinterpret_cast <HWND> (static_cast <LONG_PTR> (GetWindowLongPtr (window, GWLP_USERDATA))), 0, 10, 10, client.right - 20, client.bottom - 20, SWP_NOZORDER | SWP_NOOWNERZORDER);
use_default = false;
}
break;
}
return use_default ? DefWindowProc (window, message, w_param, l_param) : result;
}
LRESULT __stdcall WindowProc (HWND window, unsigned message, WPARAM w_param, LPARAM l_param)
{
bool
use_default = true;
LRESULT
result = 0;
switch (message)
{
case WM_CREATE:
{
RECT
client;
GetClientRect (window, &client);
CreateWindowEx (0,
TEXT ("EditboxClass"),
0,
WS_VISIBLE | WS_CHILD,
client.right/4,
client.bottom/2 - 20,
client.right/2,
40,
window,
0,
GetModuleHandle (0),
0);
}
break;
}
return use_default ? DefWindowProc (window, message, w_param, l_param) : result;
}
int __stdcall WinMain (HINSTANCE instance, HINSTANCE prev_instance, LPSTR command_line, int show)
{
WNDCLASSEX
window_class =
{
sizeof window_class,
0,
WindowProc,
0,
0,
instance,
0,
0,
reinterpret_cast <HBRUSH> (static_cast <int> (COLOR_WINDOW) + 1),
0,
TEXT ("WindowClass"),
0
},
editbox_class =
{
sizeof editbox_class,
0,
EditboxProc,
0,
0,
instance,
0,
0,
reinterpret_cast <HBRUSH> (static_cast <int> (COLOR_BTNFACE) + 1),
0,
TEXT ("EditboxClass"),
0
};
if (RegisterClassEx (&window_class) && RegisterClassEx (&editbox_class))
{
HWND
window = CreateWindowEx (0,
TEXT ("WindowClass"),
TEXT ("Demo"),
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
0,
0,
instance,
0);
if (window)
{
MSG
message;
bool
quit = false;
while (!quit)
{
switch (GetMessage (&message, window, 0, 0))
{
case -1:
case 0:
quit = true;
break;
default:
TranslateMessage (&message);
DispatchMessage (&message);
break;
}
}
}
}
return 0;
}
Это немного голые кости, но вы должны дать вам некоторое представление о том, как делать то, что вы хотите. Он не будет работать с диалоговыми окнами, определенными с использованием сценариев ресурсов (я думаю, прошло некоторое время с тех пор, как я вручную закодировал ресурс), поскольку он использует настраиваемый элемент управления для родителя окна редактирования (вещь, которая отображает фрейм). Вероятно, вы захотите добавить обработчики в EditboxProc для обработки переданного сообщения в элемент управления редактирования (например, WM_NOTIFY, WM_COMMAND, WM_GETTEXT и т. Д.) И для отображения округлых углов (WM_PAINT, WM_ERASEBKGND).
это возможно, если вы можете указать на какой-то пример или какой-нибудь хороший ресурс – anand
@ Alien01: Мне нечего показать, и я ничего не могу найти в Интернете. Я посмотрю, смогу ли я что-нибудь сбить. – Skizz
@ Alien01: Что-то связанное вместе .... – Skizz