The MASM Forum Archive 2004 to 2012

General Forums => The Campus => Topic started by: minor28 on June 11, 2010, 11:16:36 AM

Title: Tab control problem
Post by: minor28 on June 11, 2010, 11:16:36 AM
I have an ownerdrawn tab control with vertical tabs. I can't figure out how to draw the text with 90 degr orientation.


mov edi,lParam
.if [edi].DRAWITEMSTRUCT.CtlType==ODT_TAB
invoke SetBkMode,[edi].DRAWITEMSTRUCT.hdc,TRANSPARENT
invoke SetTextColor,[edi].DRAWITEMSTRUCT.hdc,000000FFh

invoke GetCurrentObject,[edi].DRAWITEMSTRUCT.hdc,OBJ_FONT
mov ecx,eax
invoke GetObject,ecx,sizeof LOGFONT,addr lgf
mov edx,lgf.LOGFONT.lfOrientation

invoke CreateFontIndirect,offset MS_Sans_Serif_8V
invoke SelectObject,[edi].DRAWITEMSTRUCT.hdc,eax
push eax

invoke GetCurrentObject,[edi].DRAWITEMSTRUCT.hdc,OBJ_FONT
mov ecx,eax
invoke GetObject,ecx,sizeof LOGFONT,addr lgf
mov edx,lgf.LOGFONT.lfOrientation

invoke DrawText,[edi].DRAWITEMSTRUCT.hdc,addr buffer,-1,addr [edi].DRAWITEMSTRUCT.rcItem,DT_CENTER or DT_VCENTER

pop eax
invoke DeleteObject,eax
.endif


First GetObject shows orientation 0 and the second 900. But the text is drawn with orientation 0.

If I try with CreateCompatibleDC no text at all are drawn.

Anyone know how to do it?

Title: Re: Tab control problem
Post by: jj2007 on June 11, 2010, 11:41:16 AM
Does your font work with the main windows' dc?

invoke CreateFont, -12, 0, 900, 900, FW_SEMIBOLD, 0, 0, 0, 0, 0, 0, 0, 0, chr$("Arial")
mov hVertFont, eax

...
TestMe proc uses ebx
LOCAL rc:RECT
mov rc.left, 10
mov rc.top, 100
mov rc.right, 200
mov rc.bottom, 10
invoke GetDC, hMainWnd
mov ebx, eax ; the DC
invoke SelectObject, eax, hVertFont
invoke DrawText, ebx, chr$("A text"), 6, addr rc, 0
invoke ReleaseDC, hMainWnd, ebx
ret
TestMe endp
Title: Re: Tab control problem
Post by: minor28 on June 11, 2010, 01:02:09 PM
It the tab is not ownerdrawn and horizantal and I change it to vertical then the font works.


invoke GetWindowLong,hTab3,GWL_STYLE
add eax,TCS_VERTICAL
invoke SetWindowLong,hTab3,GWL_STYLE,eax
invoke CreateFontIndirect,offset MS_Sans_Serif_8V
invoke SendMessage,hTab3,WM_SETFONT,eax,TRUE
Title: Re: Tab control problem
Post by: jj2007 on June 11, 2010, 01:10:45 PM
Try exchanging top and bottom of rcItem.
Title: Re: Tab control problem
Post by: minor28 on June 11, 2010, 01:47:17 PM
QuoteTry exchanging top and bottom of rcItem.

No text at all.

The rectangle is correct but the text is horizantal and starts at the top and left of the rectangle and is truncated at the right side.
Title: Re: Tab control problem
Post by: minor28 on June 11, 2010, 03:01:21 PM
No I succeeded.

Set graphics mode to advanced and exchanging top and bottom of rcItem as you said solved the problem.

Thanks jj2007