2017-02-17 4 views
0

Я пытаюсь полностью удалить все границы внешнего окна с помощью winapi.Удалить полностью границы внешнего окна

Сейчас я достиг следующего результата, используя этот код:

enter image description here

public static int GWL_STYLE = -16; 
    public static int WS_BORDER = 0x00800000; //window with border 
    public static int WS_DLGFRAME = 0x00400000; //window with double border but no title 
    public static int WS_CAPTION = WS_BORDER | WS_DLGFRAME; //window with a title bar 
    private const int WS_SYSMENU = 0x00080000;  //window with no borders etc. 
    private const int WS_MAXIMIZEBOX = 0x00010000; 
    private const int WS_MINIMIZEBOX = 0x00020000; //window with minimizebox 

     public static void HideWindowBorders(IntPtr hWnd) 
    { 
     int style = GetWindowLong(hWnd, GWL_STYLE); //gets current style 
     SetWindowLong(hWnd, GWL_STYLE, (style & ~WS_CAPTION)); //removes caption from current style 
    } 

Это удаляет заголовок и мин/макс/кнопку закрытия (странно только после изменения размера окна). Однако это не устраняет тонкую границу, которая позволяет изменять размер окна.

Как можно удалить границы?

+0

Вы пробовали очистить стиль окна WS_THICKFRAME? Если я помню, что контролирует, имеет ли окно границу «изменить размер». Что касается изменения только после изменения размера, вам нужно, чтобы неклиентская область окна была недействительной, чтобы это произошло. Попробуйте p/invoke RedrawWindow() с флагом RDW_FRAME. – Tim

+0

@Tim: Нет, вам нужно выполнить [документацию] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms644898.aspx) и вызвать [SetWindowPos] (https: // msdn .microsoft.com/en-us/library/windows/desktop/ms633545.aspx) для новых стилей фрейма. – IInspectable

ответ

0
 public const uint WS_SIZEBOX = 0x00040000; 

    public static void HideWindowBorders(IntPtr hWnd) 
    { 
     int style = GetWindowLong(hWnd, GWL_STYLE); //gets current style 
     SetWindowLong(hWnd, GWL_STYLE, (uint)(style & ~(WS_CAPTION | WS_SIZEBOX))); //removes caption and the sizebox from current style 
    } 
0

Я думаю, что вы, возможно, ищете WS_POPUP, а не ~ WS_CAPTION.

Может быть, попробуйте добавить этот стиль:

public const uint WS_POPUP = 0x80000000; 

Затем seettiing окно длиной примерно так:

SetWindowLong(hWnd, GWL_STYLE, WS_POPUP); 

Просто для дальнейшего объяснения, WS_POPUP по существу удаляет любые проклейки/изменение размеров, мин/максимизацию который оставляет вас с простым окном.

+0

Нет, 'WS_POPUP' этого не делает. 'WS_POPUP' ** сам по себе ** делает. Вы * заменяете все стили, которые уже были там * с помощью 'WS_POPUP'. Удаление 'WS_CAPTION' является правильным решением, но не является полным решением. – andlabs

+0

Я пробовал, но когда окно всплывающее, он не может взаимодействовать. Когда я нажимаю на окно, оно скрывается (как всплывающее окно). – Sturm

Смежные вопросы