The border in the first picture is just a normal border like most windows have, but because the listview control has a border too, very close to the parent window border, it looks like a very big border.
The second window has no border at all, the border is custom drawn. The window only has the WS_POPUP style (iirc). On Iczelion's site I think there is an example of custom drawn windows.
Thomas
P.S. why would MASM not be able to do the same things as TASM?
This message was edited by Thomas, on 5/20/2001 3:13:04 PM
disease,
The trick is to look at the styles for CreateWindowEx() and test
out various combinations. From memory the only true borderless
window is a WS_POPUP with WS_VISIBLE. A borderless window has no
title bar or system controls at all.
Regards,
You might want to try this linker option:
/subsystem:windows,3.1
Under Win9x, this changes the appearance of some windows.
3.1 gave me a warning and said the default was used
3.10 worked, though
If you still have that source I sent you for the Unprexistence GUI that used a borderless windows.If you remove all the drawing commands and run it all you'll get is a black box, perfect to start from scratch with.
i lost the source. ;)
i tried to compiled many time, but got too many errors. is it only
after i deleted that i then realize that the reason it couldn't
compile was because the resource file was mission. ;)
Heres some new code striped down to the basics. Sorry I couldn't upload it but its not too long. Just copy and paste.
Note all the code inside the WM_MOUSEMOVE and WM_LBUTTONDOWM messages allows for moving and resizing the window. Also note the WS_BORDER or WS_POPUP styles in the CreatWindowEx proc, their the only styles you need for the type of border you want, but then you'll need the control window movement as I've done here.
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\masm32.lib
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
WndProc proto :DWORD,:DWORD,:DWORD,:DWORD
Int2Real32 macro val
fild val
fstp val
endm
BrdStruct Struct
Left dd ?
Right dd ?
Bottom dd ?
Top dd ?
RightMod dd ?
BottomMod dd ?
BrdStruct Ends
WNDStruct Struct
CaptionBar dd ?
Border BrdStruct {?}
rect RECT {?}
WNDStruct ends
.data
ClassName db "GUI",0
AppName db "GUI Base",0
WND WNDStruct {20, {5, 5, 5, 5, ?, ?}, {?}}
.data?
pBuffer dd ?
pBufferB dd ?
hBuffer dd ?
hInstance HINSTANCE ?
hWindow dd ?
CommandLine LPSTR ?
Buffer db 32 dup(?)
rect RECT {?}
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
invoke ExitProcess,eax
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
mov eax, hInstance
mov wc.hInstance, eax
mov wc.hbrBackground,COLOR_WINDOW+1
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
; invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor, NULL ; You don't set a cursor here if you intend to change it later
invoke RegisterClassEx, addr wc
INVOKE CreateWindowEx,NULL,ADDR ClassName,addr AppName,\
WS_BORDER or WS_POPUP,CW_USEDEFAULT,\
CW_USEDEFAULT,300,200,NULL,NULL,\
hInst,NULL
mov hwnd,eax
invoke ShowWindow, hwnd,SW_SHOWNORMAL
invoke UpdateWindow, hwnd
.WHILE TRUE
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
mov eax,msg.wParam
ret
WinMain endp
WndProc Proc uses edi esi ebx hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL hDc:DWORD, ps:PAINTSTRUCT
mov eax, hWnd
mov hWindow, eax
.IF uMsg==WM_DESTROY
.if hBuffer
invoke GlobalUnlock,pBuffer
invoke GlobalFree,hBuffer
.endif
invoke PostQuitMessage,NULL
mov eax, lParam
.ELSEIF uMsg == WM_CREATE
and hBuffer, 0
.ELSEIF uMsg == WM_LBUTTONDOWN
mov eax, lParam
mov edx, eax
and eax, 0FFFFh
and edx, 0FFFF0000h
shr edx, 16
.If eax < WND.Border.Left
.If edx < WND.Border.Top
invoke PostMessageA,hWnd,WM_NCLBUTTONDOWN,HTTOPLEFT,0
.ElseIf edx > WND.Border.BottomMod
invoke PostMessageA,hWnd,WM_NCLBUTTONDOWN,HTBOTTOMLEFT,0
.Else
invoke PostMessageA,hWnd,WM_NCLBUTTONDOWN,HTLEFT,0
.EndIf
.ElseIf eax > WND.Border.RightMod
.If edx < WND.Border.Top
invoke PostMessageA,hWnd,WM_NCLBUTTONDOWN,HTTOPRIGHT,0
.ElseIf edx > WND.Border.BottomMod
invoke PostMessageA,hWnd,WM_NCLBUTTONDOWN,HTBOTTOMRIGHT,0
.Else
invoke PostMessageA,hWnd,WM_NCLBUTTONDOWN,HTRIGHT,0
.EndIf
.ElseIf edx < WND.Border.Top
invoke PostMessageA,hWnd,WM_NCLBUTTONDOWN,HTTOP,0
.ElseIf edx > WND.Border.BottomMod
invoke PostMessageA,hWnd,WM_NC