This change make the auto-completion box looks the same on all system.
On Win10 it has 6px white frame above the window. Change WS_THICKFRAME to WS_BORDER could remove it.
Tested other apps doesn't using window frame: Visual Studio 2017/2019, CodeLite.
Drawbacks compared to WS_THICKFRAME: resizing by mouse is harder, ListBoxX::NcHitTest() needs improvement.
Some links
https://stackoverflow.com/questions/39731497/create-window-without-titlebar-with-resizable-border-and-without-bogus-6px-whit
https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/6238e230-5b64-4f64-871a-b21b9b668df1/windows-10-nonclient-area
Resizing should be active over more than 1 pixel. Best would be adding another pixel or 2 of border but that may be difficult to make look good. Its likely OK to steal a pixel or 2 from the interior bottom/right of the list box for resizing.
I personally prefer the old Win7 thick frame showing that resizing is possible but Win10 should be the focus for appearance and functionality. Win7 should continue to work but it can be the loser if there is conflict for appearance.
Inflate and Deflate only differ by sign so a single Inflate method is sufficient with YAGNI applying here:
Attached patch draw a 4px transparent frame, resizing is easier, except the code inside WM_NCPAINT has bug on resizing.
With WS_BORDER, (on Win10 with default 1px border) I only get HTBORDER from default WM_NCHITTEST.
Yes, the resize drawing is poor. The area where resize is active appears OK although there is only ever horizontal or vertical resize cursor, never diagonal.

Last edit: Neil Hodgson 2019-05-14
A rough implementation for diagonal:
full code for hit test:
That behaves better.
Using arithmetic and magic constants obscures the intent.
If you are going to commit this change, please consider making to execlusive to Windows 10. Removing WS_THICKFRAME on Windows 7 makes the the auto-completion box look really unpolished, imo. This flat look doesn't go well the the general UI design of pre-Win 8.
There is a potential change to make resizing an option at https://www.scintilla.org/AutocompletionNonResizing.patch .
This needs the order to be changed to work first time:
ac.lb->SetOptionsshould be called beforeac.Start.ListOptions optionscan be passed into ac.Start(), then calls lb->SetOptions() before lb->Create() inside AutoComplete::Start().Update comment for ListBoxX::NcHitTest() for WS_BORDER, the code is similar to https://sourceforge.net/p/scintilla/feature-requests/1284/#5617
This, on top of AutocompletionNonResizing.patch still makes resizing very difficult. Trying to graft in ac-frame2.diff doesn't help. Perhaps there is some difference in our systems (DPI?) that make this work OK for you.
It is dark mode implementers that motivated the proposed change: the white top bar looks particularly bad in dark mode.

AutocompletionNonResizing.patch is saying: either you get resizing and an extra white bar or you get a fixed size and no extra bar. That's why the option to get WS_BORDER is called SC_AUTOCOMPLETE_FIXED_SIZE.
Yeah, resizing is harder for WS_BORDER even with NcHitTest() changes.
Since application can use AutoCSetMaxHeight() and AutoCSetMaxWidth() to set auto-completion box to a prefect size before calling AutoCShow(), I think this is not important.
Following is the code used by Notepad2:
https://github.com/zufuliu/notepad2/blob/master/src/EditAutoC.c#L1453
There is one confusing thing: AutoCSetMaxWidth() does not works as expected without multiply max word length (in bytes) by a factor large than 1, otherwise longest item will be drawn with trailing ellipsis.
LaTeXInput-4.diff at https://sourceforge.net/p/scintilla/feature-requests/1407/#688a/d0b9/1b17 has similar changes for SciTE.
There were problems with this and I undid some of the changes. There shouldn't be a need to call AutoCSetMaxHeight with an expression: just leave it at the preference value since it adjusts for the list length.
AutoCSetMaxWidth is based on average character width. Sizing for widest item just picks the longest string and measures that instead of measuring each item, so "iiiii" would determine the width instead of "WWWW". It would probably be reasonable to measure each item now. The current technique was likely trying to avoid slowness back in ancient times.
Committed the non-resizing option.