[Форум] [Помощь] [Поиск] [Выйти] |
Добро пожаловать, ![]() |
|
|
| ||
Private Declare Function SetWindowLong Lib user32 Alias SetWindowLongA _ (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Const WS_EX_CLIENTEDGE = &H200& Private Const GWL_EXSTYLE = (-20) Private Sub MDIForm_Load() SetWindowLong Me.hwnd, GWL_EXSTYLE, WS_EX_CLIENTEDGE End Sub Константа WS_EX_CLIENTEDGE задаёт рамку и делает её утопленной см. Pic 1. ![]() Pic 1 Если не задавать стиль (по умолчанию), окно имеет вид см. Pic 2. ![]() Pic 2 Вопрос: Какой стиль имеет окно см. Pic 3? И как его задать? ![]() Pic 3 |
| ||
[u]Такое окно создается при помощи функции API:[/u] HWND CreateWindow( LPCTSTR lpClassName, // pointer to registered class name LPCTSTR lpWindowName, // pointer to window name DWORD dwStyle, // window style int x, // horizontal position of window int y, // vertical position of window int nWidth, // window width int nHeight, // window height HWND hWndParent, // handle to parent or owner window HMENU hMenu, // handle to menu or child-window identifier HANDLE hInstance, // handle to application instance LPVOID lpParam // pointer to window-creation data ); где используются стандартные стили описания окна - данное окно является просто overlapped.... WS_OVERLAPPED Creates an overlapped window. An overlapped window usually has a caption and a border. WS_OVERLAPPEDWINDOW Creates an overlapped window with the WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX, and WS_MAXIMIZEBOX styles. проблем вроде не должно быть :xz: ![]() |
| ||
в догонку: можно попробовать дополнительно с WS_OVERLAPPEDWINDOW еще WS_CLIPCHILDREN |
| ||
Благодарю за внимание. Похоже, что Visual Basic 6.0 не поддерживает CreateWindow Пишет: Run-time error '453': Can't find Dll entry point CreateWindowA in user32 Зато поддерживает CreateWindowEx Я даже нашёл пример как эту функцию использовать http://mostdelta.hut.ru/wincommander/winapI32.shtml Но в моём случае нужно ИЗМЕНИТЬ уже готовую MDIForm-у (иначе придется, чуть ли не заново начинать учить букварь:) Возможно, нужное решение лежит в комбинации констант. Так, например WS_MINIMIZEBOX даёт стиль см. Pic 4 SetWindowLong Me.hwnd, GWL_EXSTYLE, WS_MINIMIZEBOX ![]() Pic 4 В моём случае мне не обязательно именно такой стиль как на Pic 3. Мне нужно чтобы меню отделялась от ToolBar-a (но не просто полосой). Подойдёт и стиль как на Pic 1, вот толка бы уменьшить глубину бордюра. |
| ||
дык а что тебе мешает вместо GWL_EXSTYLE использовать стандратные стили GWL_STYLE - установи стиль overlapped + WS_CLIPCHILDREN WS_CLIPCHILDREN ! WS_OVERLAPPEDWINDOW ? |
| ||
SetWindowLong Me.hwnd, GWL_STYLE, WS_CLIPCHILDREN Or WS_OVERLAPPED ![]() Pic 5 SetWindowLong Me.hwnd, GWL_STYLE, WS_CLIPCHILDREN Or WS_OVERLAPPED Or WS_CAPTION ![]() Pic 6 |
| ||
БЛИН а старые стили кто запоминать будет? ::SetWindowLong(Me.hwnd, GWL_STYLE, ::GetWindowLong(Me.hwnd,GWL_STYLE) ! WS_CLIPCHILDREN ! WS_OVERLAPPEDWINDOW ) ![]() |
| ||
Получается Pic 2 SetWindowLong Me.hwnd, GWL_STYLE, GetWindowLong(Me.hwnd, GWL_STYLE) Or WS_CLIPCHILDREN Or WS_OVERLAPPED Похоже VisualBasic не пддерживает WS_OVERLAPPEDWINDOW (WS_OVERLAPPED поддерживает) SetWindowLong Me.hwnd, GWL_STYLE, GetWindowLong(Me.hwnd, GWL_STYLE) Or WS_CLIPCHILDREN Or WS_OVERLAPPEDWINDOW Тут тоже Pic 2 |
| ||
из winuser.h ................................................................ #define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED ! WS_CAPTION ! WS_SYSMENU ! WS_THICKFRAME ! WS_MINIMIZEBOX ! WS_MAXIMIZEBOX) #define WS_POPUPWINDOW (WS_POPUP ! WS_BORDER ! WS_SYSMENU) ........................................... попробуй дополнительно с WS_OVERLAPPED дополнительно использовать WS_POPUP!WS_BORDER..... больше ничего на ум не приходит :xz: |
| ||
Всё равно получается Pic 2. Благодарю за уделённое мне внимание. |
| ||
В комплекте VC++6.0 поставляется удивительная утилитка Spy++. Она вам покажет и класс окна, и стили окна. |
| ||
Благодарю. Дык у меня SpyWorks Professional еся, с него то я и начал. Но, похоже, тут не в стилях дело. Наверное, дело в том, что VB имеет свою менюшку. И к меню верхнего уровня хрен подлезешь. А использовать менюшку стороннего производителя не хотса т.к. они не поддерживают горячие клавиши с русскими буквами, самолично отслеживать нажатия геморойно. |