Project pTestTabs6, form frmTestTabs:
-------------------------------------Sub Form_Load()... Set c = .Tabs.Add("CONTENTS")...End Sub-------------------------------------This Code results for the Project vbalDTab6, UserControl vbalDTabControl in
-------------------------------------Private Sub drawTabs(Optional ByVal lhDCTo As Long = 0)... If m_bIsNt Then DrawTextW lHDC, StrPtr(m_tTab(iC).sCaption), -1, tCalcR,DT_CALCRECT Or DT_LEFT Or DT_SINGLELINE Else DrawText lHDC, m_tTab(iC).sCaption, -1, tCalcR, DT_CALCRECTOr DT_LEFT Or DT_SINGLELINE End If...End Sub-------------------------------------to StrPtr(m_tTab(iC).sCaption = 0 (means null, not a pointer to a nullstring!) Because of this the function DrawTextW() crashes the Application. So for a short workaround I changed the code as followed:
-------------------------------------Private Sub drawTabs(Optional ByVal lhDCTo As Long = 0)... If m_bIsNt Then Dim sp& sp = StrPtr(m_tTab(iC).sCaption) If sp Then DrawTextW lHDC, StrPtr(m_tTab(iC).sCaption), -1,tCalcR, DT_CALCRECT Or DT_LEFT Or DT_SINGLELINE Else DrawText lHDC, m_tTab(iC).sCaption, -1, tCalcR, DT_CALCRECT OrDT_LEFT Or DT_SINGLELINE End If...End Sub-------------------------------------Maybe, in the case, it is especially required to set tCalcR to dedicated values, but it seems to work fine. The function DrawText() resp. DrawTextA() seems not to crash, but I couldn't test it under real conditions. Perhaps VB's UNICODE to ANSI conversion with ByVal corrects the problem.
For me this works fine.
Date of the tested software: 27/04/03
Environment: VS6.0 SP5, WinNT4.0/SP6a and WinXP/SP1a
|