Re: Static Text Control problem
I thought before I try to debug this program I would post all of the code
that is added after all of the graphics are placed on the main dialog. And
this is the only code that I have added before this problem occurred. The
code is for a tab control placed on the dialog from the editor toolbar. And
I have looked around at other code for tab controls. And I believe that this
is one of the better and easier to understand and implement. That is why I
didn't want to post it, since I didn't write it. It has been minimally
modified though.
And this problem is occuring very early, just after some button controls,
a slider control, tab control, and a two static text controls that have
control member variables from the class wizard are placed on the main
dialog. I thought it could be a problem with Visual C++ 6.
The steps I have used for the only code I have added are the following:
1. Use the Insert menu and add a New Class, naming it CMyTabCtrl. And use
CTabCtrl for the Base Class.
2. Use the Class Wizard, add a member "control" variable for the Tab
Control, naming it m_cTabCtrl.
3. Open the PokerSimDlg.h and add the following include directive.
#include "MyTabCtrl.h"
4. This is placed in the CMyTabCtrl header file manually:
public:
CDialog *TabPages[6];
int nNumberOfPages;
int nCurrentTab;
4. In the CMyTabCtrl constructor, the following lines should be added.
TabPages[0] = new CTab1;
TabPages[1] = new CTab2;
TabPages[2] = new CTab3;
TabPages[3] = new CTab4;
TabPages[4] = new CTab5;
TabPages[5] = new CTab6;
nNumberOfPages = 6;
5. In the CMyTabCtrl destructor, the following lines should be added:
for(int nCount = 0; nCount < nNumberOfPages; ++nCount)
{
delete TabPages[nCount];
}
7. Add Member Function to the CMyTabCtrl class, naming it InitTab. Use void
as the return type and the access is public.
nCurrentTab = 0;
TabPages[0]->Create(IDD_TAB1_DIALOG, this);
TabPages[1]->Create(IDD_TAB2_DIALOG, this);
TabPages[2]->Create(IDD_TAB3_DIALOG, this);
TabPages[3]->Create(IDD_TAB4_DIALOG, this);
TabPages[4]->Create(IDD_TAB5_DIALOG, this);
TabPages[5]->Create(IDD_TAB6_DIALOG, this);
TabPages[0]->ShowWindow(SW_SHOW);
TabPages[1]->ShowWindow(SW_HIDE);
TabPages[2]->ShowWindow(SW_HIDE);
TabPages[3]->ShowWindow(SW_HIDE);
TabPages[4]->ShowWindow(SW_HIDE);
TabPages[5]->ShowWindow(SW_HIDE);
SetRectangle();
8. Using the Class Wizard, add a OnLButtonDown "message handler" in the
CMyTabCtrl class. And add the following lines:
if(nCurrentTab != GetCurFocus())
{
TabPages[nCurrentTab]->ShowWindow(SW_HIDE);
nCurrentTab=GetCurFocus();
TabPages[nCurrentTab]->ShowWindow(SW_SHOW);
TabPages[nCurrentTab]->SetFocus();
}
9. In the "Class View" window under the main dialog class, CPokerSimDlg,
double click OnInitDialog( ). Above the return statement, add the following
lines:
m_cTabCtrl.InsertItem(0, "Tab 1");
m_cTabCtrl.InsertItem(1, "Tab 2");
m_cTabCtrl.InsertItem(2, "Tab 3");
m_cTabCtrl.InsertItem(3, "Tab 4");
m_cTabCtrl.InsertItem(4, "Tab 5");
m_cTabCtrl.InsertItem(5, "Tab 6");
m_cTabCtrl.InitTab();
10. Add Member Function to the CMyTabCtrl class, naming it SetRectangle.
Use void as the return type and the access is public. And add the following
lines:
CRect tabRect, itemRect;
int nX, nY, nXc, nYc;
GetClientRect(&tabRect);
GetItemRect(0, &itemRect);
nX=itemRect.left + 2;
nY=itemRect.bottom + 1;
nXc=tabRect.right-itemRect.left - 4;
nYc=tabRect.bottom - nY - 2;
TabPages[0]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);
for(int nCount = 1; nCount < nNumberOfPages; ++nCount)
{
TabPages[nCount]->SetWindowPos(&wndTop, nX, nY, nXc, nYc,
SWP_HIDEWINDOW);
}
11. Open the MyTabCtrl.cpp file and add the following include directives.
#include "Tab1.h"
#include "Tab2.h"
#include "Tab3.h"
#include "Tab4.h"
#include "Tab5.h"
#include "Tab6.h"
12. Use the Insert menu and add a New Form, for each tab. Use the names
CTab1, CTab2, CTab3, etc. Change the properties of each Tab Dialog Box to:
Style - Child
Border - None
And change the size of the dialog boxes to 503 x 270. Also, remove all
the "OK" and "Cancel" buttons. And set the Guides to ( 2 ) on each side.
------------------------------------
Is there any problem with these code instructions. Because this is the
only code I have added to the program that contains only graphics at this
point.