Fix debug assertion on link options dialog
Fix tab control offset problem Enhance tab controls by graying out inoperable tabs Fix locked aspect ratio in Direct3D mode git-svn-id: https://svn.code.sf.net/p/vbam/code/trunk@14 a31d4220-a93d-0410-bf67-fe4944624d44
This commit is contained in:
parent
e57de37f3f
commit
bd77ca8061
28
res/VBA.rc
28
res/VBA.rc
|
@ -71,23 +71,23 @@ END
|
||||||
// Dialog
|
// Dialog
|
||||||
//
|
//
|
||||||
|
|
||||||
IDD_LINKTAB DIALOG 0, 0, 225, 162
|
IDD_LINKTAB DIALOGEX 0, 0, 254, 203
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Link Options"
|
CAPTION "Link Options"
|
||||||
FONT 8, "MS Sans Serif"
|
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
CONTROL "Tab1",IDC_TAB1,"SysTabControl32",0x0,7,7,210,130
|
CONTROL "Tab1",IDC_TAB1,"SysTabControl32",0x0,9,6,240,162
|
||||||
PUSHBUTTON "OK",ID_OK,31,140,60,15
|
PUSHBUTTON "OK",ID_OK,57,180,60,15
|
||||||
PUSHBUTTON "Cancel",ID_CANCEL,114,140,57,15
|
PUSHBUTTON "Cancel",ID_CANCEL,140,180,57,15
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_LINKTAB1 DIALOG 0, 0, 210, 130
|
IDD_LINKTAB1 DIALOGEX 0, 0, 184, 79
|
||||||
STYLE DS_SETFONT | WS_CHILD | WS_VISIBLE
|
STYLE DS_SETFONT | WS_CHILD | WS_VISIBLE
|
||||||
FONT 8, "MS Sans Serif"
|
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "Link timeout (in milliseconds)",IDC_STATIC,17,12,92,16
|
LTEXT "Link timeout (in milliseconds)",IDC_STATIC,17,12,92,16
|
||||||
EDITTEXT IDC_LINKTIMEOUT,116,10,53,14,ES_AUTOHSCROLL | ES_NUMBER
|
EDITTEXT IDC_LINKTIMEOUT,116,10,53,14,ES_AUTOHSCROLL | ES_NUMBER
|
||||||
CONTROL "Single Computer",IDC_LINK_SINGLE,"Button",BS_AUTORADIOBUTTON,17,27,71,16
|
CONTROL "Single Computer",IDC_LINK_SINGLE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,17,27,71,16
|
||||||
CONTROL "Network",IDC_LINK_LAN,"Button",BS_AUTORADIOBUTTON,17,43,70,16
|
CONTROL "Network",IDC_LINK_LAN,"Button",BS_AUTORADIOBUTTON,17,43,70,16
|
||||||
END
|
END
|
||||||
|
|
||||||
|
@ -106,9 +106,9 @@ BEGIN
|
||||||
CONTROL "Speed hacks",IDC_SSPEED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,76,70,57,12
|
CONTROL "Speed hacks",IDC_SSPEED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,76,70,57,12
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_LINKTAB3 DIALOG 0, 0, 210, 108
|
IDD_LINKTAB3 DIALOGEX 0, 0, 188, 108
|
||||||
STYLE DS_SETFONT | WS_CHILD
|
STYLE DS_SETFONT | WS_CHILD
|
||||||
FONT 8, "MS Sans Serif"
|
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
CONTROL "TCP/IP",IDC_CLINKTCP,"Button",BS_AUTORADIOBUTTON | WS_GROUP,58,20,39,12
|
CONTROL "TCP/IP",IDC_CLINKTCP,"Button",BS_AUTORADIOBUTTON | WS_GROUP,58,20,39,12
|
||||||
CONTROL "UDP",IDC_CLINKUDP,"Button",BS_AUTORADIOBUTTON | WS_DISABLED,118,20,32,12
|
CONTROL "UDP",IDC_CLINKUDP,"Button",BS_AUTORADIOBUTTON | WS_DISABLED,118,20,32,12
|
||||||
|
@ -1119,6 +1119,12 @@ END
|
||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
GUIDELINES DESIGNINFO
|
GUIDELINES DESIGNINFO
|
||||||
BEGIN
|
BEGIN
|
||||||
|
IDD_LINKTAB, DIALOG
|
||||||
|
BEGIN
|
||||||
|
RIGHTMARGIN, 225
|
||||||
|
BOTTOMMARGIN, 162
|
||||||
|
END
|
||||||
|
|
||||||
IDD_OPENDLG, DIALOG
|
IDD_OPENDLG, DIALOG
|
||||||
BEGIN
|
BEGIN
|
||||||
RIGHTMARGIN, 165
|
RIGHTMARGIN, 165
|
||||||
|
|
|
@ -131,7 +131,7 @@ Direct3DDisplay::Direct3DDisplay()
|
||||||
width = 0;
|
width = 0;
|
||||||
height = 0;
|
height = 0;
|
||||||
filterDisabled = false;
|
filterDisabled = false;
|
||||||
keepAspectRatio = true; // theApp.d3dKeepAspectRatio;
|
keepAspectRatio = false; // theApp.d3dKeepAspectRatio;
|
||||||
lockableBuffer = false;
|
lockableBuffer = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,6 @@ void LinkOptions::DoDataExchange(CDataExchange* pDX)
|
||||||
{
|
{
|
||||||
CDialog::DoDataExchange(pDX);
|
CDialog::DoDataExchange(pDX);
|
||||||
//{{AFX_DATA_MAP(LinkOptions)
|
//{{AFX_DATA_MAP(LinkOptions)
|
||||||
DDX_Control(pDX, IDC_TAB1, m_tabctrl);
|
|
||||||
//}}AFX_DATA_MAP
|
//}}AFX_DATA_MAP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,13 +58,14 @@ BOOL LinkOptions::OnInitDialog(){
|
||||||
|
|
||||||
CDialog::OnInitDialog();
|
CDialog::OnInitDialog();
|
||||||
|
|
||||||
|
m_tabctrl.SubclassDlgItem(IDC_TAB1, this);
|
||||||
|
|
||||||
tabitem.mask = TCIF_TEXT;
|
tabitem.mask = TCIF_TEXT;
|
||||||
|
|
||||||
for(i=0;i<3;i++){
|
for(i=0;i<3;i++){
|
||||||
tabitem.pszText = tabtext[i];
|
tabitem.pszText = tabtext[i];
|
||||||
m_tabctrl.InsertItem(i, &tabitem);
|
m_tabctrl.InsertItem(i, &tabitem);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_tabctrl.m_tabdialog[0]->Create(IDD_LINKTAB1, this);
|
m_tabctrl.m_tabdialog[0]->Create(IDD_LINKTAB1, this);
|
||||||
m_tabctrl.m_tabdialog[1]->Create(IDD_LINKTAB2, this);
|
m_tabctrl.m_tabdialog[1]->Create(IDD_LINKTAB2, this);
|
||||||
m_tabctrl.m_tabdialog[2]->Create(IDD_LINKTAB3, this);
|
m_tabctrl.m_tabdialog[2]->Create(IDD_LINKTAB3, this);
|
||||||
|
@ -81,6 +81,15 @@ BOOL LinkOptions::OnInitDialog(){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOL LinkOptions::PreTranslateMessage(MSG* pMsg)
|
||||||
|
{
|
||||||
|
return m_tabctrl.TranslatePropSheetMsg(pMsg) ? TRUE :
|
||||||
|
CDialog::PreTranslateMessage(pMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BEGIN_MESSAGE_MAP(LinkOptions, CDialog)
|
BEGIN_MESSAGE_MAP(LinkOptions, CDialog)
|
||||||
//{{AFX_MSG_MAP(LinkOptions)
|
//{{AFX_MSG_MAP(LinkOptions)
|
||||||
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, OnSelchangeTab1)
|
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, OnSelchangeTab1)
|
||||||
|
@ -205,24 +214,233 @@ void LinkOptions::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
|
||||||
*pResult = 0;
|
*pResult = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IMPLEMENT_DYNAMIC(CMyTabCtrl, CTabCtrl)
|
||||||
|
BEGIN_MESSAGE_MAP(CMyTabCtrl, CTabCtrl)
|
||||||
|
ON_NOTIFY_REFLECT(TCN_SELCHANGING, OnSelChanging)
|
||||||
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
BOOL CMyTabCtrl::SubclassDlgItem(UINT nID, CWnd* pParent)
|
||||||
|
{
|
||||||
|
if (!CTabCtrl::SubclassDlgItem(nID, pParent))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
ModifyStyle(0, TCS_OWNERDRAWFIXED);
|
||||||
|
|
||||||
|
// If first tab is disabled, go to next enabled tab
|
||||||
|
if (!IsTabEnabled(0)) {
|
||||||
|
int iTab = NextEnabledTab(0, TRUE);
|
||||||
|
SetActiveTab(iTab);
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CMyTabCtrl::IsTabEnabled(int iTab)
|
||||||
|
{
|
||||||
|
if (!lanlink.active && iTab > 0)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// Draw the tab: mimic SysTabControl32, except use gray if tab is disabled
|
||||||
|
//
|
||||||
|
void CMyTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
|
||||||
|
{
|
||||||
|
DRAWITEMSTRUCT& ds = *lpDrawItemStruct;
|
||||||
|
|
||||||
|
int iItem = ds.itemID;
|
||||||
|
|
||||||
|
// Get tab item info
|
||||||
|
char text[128];
|
||||||
|
TCITEM tci;
|
||||||
|
tci.mask = TCIF_TEXT;
|
||||||
|
tci.pszText = text;
|
||||||
|
tci.cchTextMax = sizeof(text);
|
||||||
|
GetItem(iItem, &tci);
|
||||||
|
|
||||||
|
// use draw item DC
|
||||||
|
CDC dc;
|
||||||
|
dc.Attach(ds.hDC);
|
||||||
|
|
||||||
|
// calculate text rectangle and color
|
||||||
|
CRect rc = ds.rcItem;
|
||||||
|
rc += CPoint(1,4); // ?? by trial and error
|
||||||
|
|
||||||
|
// draw the text
|
||||||
|
OnDrawText(dc, rc, text, !IsTabEnabled(iItem));
|
||||||
|
|
||||||
|
dc.Detach();
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// Draw tab text. You can override to use different color/font.
|
||||||
|
//
|
||||||
|
void CMyTabCtrl::OnDrawText(CDC& dc, CRect rc,
|
||||||
|
CString sText, BOOL bDisabled)
|
||||||
|
{
|
||||||
|
dc.SetTextColor(GetSysColor(bDisabled ? COLOR_3DHILIGHT : COLOR_BTNTEXT));
|
||||||
|
dc.DrawText(sText, &rc, DT_CENTER|DT_VCENTER);
|
||||||
|
|
||||||
|
if (bDisabled) {
|
||||||
|
// disabled: draw again shifted northwest for shadow effect
|
||||||
|
rc += CPoint(-1,-1);
|
||||||
|
dc.SetTextColor(GetSysColor(COLOR_GRAYTEXT));
|
||||||
|
dc.DrawText(sText, &rc, DT_CENTER|DT_VCENTER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// Selection is changing: disallow if tab is disabled
|
||||||
|
//
|
||||||
|
void CMyTabCtrl::OnSelChanging(NMHDR* pnmh, LRESULT* pRes)
|
||||||
|
{
|
||||||
|
TRACE("CMyTabCtrl::OnSelChanging\n");
|
||||||
|
|
||||||
|
// Figure out index of new tab we are about to go to, as opposed
|
||||||
|
// to the current one we're at. Believe it or not, Windows doesn't
|
||||||
|
// pass this info
|
||||||
|
//
|
||||||
|
TC_HITTESTINFO htinfo;
|
||||||
|
GetCursorPos(&htinfo.pt);
|
||||||
|
ScreenToClient(&htinfo.pt);
|
||||||
|
int iNewTab = HitTest(&htinfo);
|
||||||
|
|
||||||
|
if (iNewTab >= 0 && !IsTabEnabled(iNewTab))
|
||||||
|
*pRes = TRUE; // tab disabled: prevent selection
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// Trap arrow-left key to skip disabled tabs.
|
||||||
|
// This is the only way to know where we're coming from--ie from
|
||||||
|
// arrow-left (prev) or arrow-right (next).
|
||||||
|
//
|
||||||
|
BOOL CMyTabCtrl::PreTranslateMessage(MSG* pMsg)
|
||||||
|
{
|
||||||
|
if (pMsg->message == WM_KEYDOWN &&
|
||||||
|
(pMsg->wParam == VK_LEFT || pMsg->wParam == VK_RIGHT)) {
|
||||||
|
|
||||||
|
int iNewTab = (pMsg->wParam == VK_LEFT) ?
|
||||||
|
PrevEnabledTab(GetCurSel(), FALSE) :
|
||||||
|
NextEnabledTab(GetCurSel(), FALSE);
|
||||||
|
if (iNewTab >= 0)
|
||||||
|
SetActiveTab(iNewTab);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return CTabCtrl::PreTranslateMessage(pMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////
|
||||||
|
// Translate parent property sheet message. Translates Control-Tab and
|
||||||
|
// Control-Shift-Tab keys. These are normally handled by the property
|
||||||
|
// sheet, so you must call this function from your prop sheet's
|
||||||
|
// PreTranslateMessage function.
|
||||||
|
//
|
||||||
|
BOOL CMyTabCtrl::TranslatePropSheetMsg(MSG* pMsg)
|
||||||
|
{
|
||||||
|
WPARAM key = pMsg->wParam;
|
||||||
|
if (pMsg->message == WM_KEYDOWN && GetAsyncKeyState(VK_CONTROL) < 0 &&
|
||||||
|
(key == VK_TAB || key == VK_PRIOR || key == VK_NEXT)) {
|
||||||
|
|
||||||
|
int iNewTab = (key==VK_PRIOR || GetAsyncKeyState(VK_SHIFT) < 0) ?
|
||||||
|
PrevEnabledTab(GetCurSel(), TRUE) :
|
||||||
|
NextEnabledTab(GetCurSel(), TRUE);
|
||||||
|
if (iNewTab >= 0)
|
||||||
|
SetActiveTab(iNewTab);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// Helper to set the active page, when moving backwards (left-arrow and
|
||||||
|
// Control-Shift-Tab). Must simulate Windows messages to tell parent I
|
||||||
|
// am changing the tab; SetCurSel does not do this!!
|
||||||
|
//
|
||||||
|
// In normal operation, this fn will always succeed, because I don't call it
|
||||||
|
// unless I already know IsTabEnabled() = TRUE; but if you call SetActiveTab
|
||||||
|
// with a random value, it could fail.
|
||||||
|
//
|
||||||
|
BOOL CMyTabCtrl::SetActiveTab(UINT iNewTab)
|
||||||
|
{
|
||||||
|
TRACE("CMyTabCtrl::SetActiveTab\n");
|
||||||
|
|
||||||
|
// send the parent TCN_SELCHANGING
|
||||||
|
NMHDR nmh;
|
||||||
|
nmh.hwndFrom = m_hWnd;
|
||||||
|
nmh.idFrom = GetDlgCtrlID();
|
||||||
|
nmh.code = TCN_SELCHANGING;
|
||||||
|
|
||||||
|
if (GetParent()->SendMessage(WM_NOTIFY, nmh.idFrom, (LPARAM)&nmh) >=0) {
|
||||||
|
// OK to change: set the new tab
|
||||||
|
SetCurSel(iNewTab);
|
||||||
|
|
||||||
|
// send parent TCN_SELCHANGE
|
||||||
|
nmh.code = TCN_SELCHANGE;
|
||||||
|
GetParent()->SendMessage(WM_NOTIFY, nmh.idFrom, (LPARAM)&nmh);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////
|
||||||
|
// Return the index of the next enabled tab after a given index, or -1 if none
|
||||||
|
// (0 = first tab).
|
||||||
|
// If bWrap is TRUE, wrap from beginning to end; otherwise stop at zero.
|
||||||
|
//
|
||||||
|
int CMyTabCtrl::NextEnabledTab(int iCurrentTab, BOOL bWrap)
|
||||||
|
{
|
||||||
|
int nTabs = GetItemCount();
|
||||||
|
for (int iTab = iCurrentTab+1; iTab != iCurrentTab; iTab++) {
|
||||||
|
if (iTab >= nTabs) {
|
||||||
|
if (!bWrap)
|
||||||
|
return -1;
|
||||||
|
iTab = 0;
|
||||||
|
}
|
||||||
|
if (IsTabEnabled(iTab)) {
|
||||||
|
return iTab;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////
|
||||||
|
// Return the index of the previous enabled tab before a given index, or -1.
|
||||||
|
// (0 = first tab).
|
||||||
|
// If bWrap is TRUE, wrap from beginning to end; otherwise stop at zero.
|
||||||
|
//
|
||||||
|
int CMyTabCtrl::PrevEnabledTab(int iCurrentTab, BOOL bWrap)
|
||||||
|
{
|
||||||
|
for (int iTab = iCurrentTab-1; iTab != iCurrentTab; iTab--) {
|
||||||
|
if (iTab < 0) {
|
||||||
|
if (!bWrap)
|
||||||
|
return -1;
|
||||||
|
iTab = GetItemCount() - 1;
|
||||||
|
}
|
||||||
|
if (IsTabEnabled(iTab)) {
|
||||||
|
return iTab;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void CMyTabCtrl::OnSwitchTabs(void)
|
void CMyTabCtrl::OnSwitchTabs(void)
|
||||||
{
|
{
|
||||||
CRect tabRect, itemRect;
|
CRect clientRect, wndRect;
|
||||||
int nX, nY, nXc, nYc, i;
|
int i;
|
||||||
|
|
||||||
GetClientRect(&tabRect);
|
GetClientRect(clientRect);
|
||||||
GetItemRect(0, &itemRect);
|
AdjustRect(FALSE, clientRect);
|
||||||
|
GetWindowRect(wndRect);
|
||||||
nX=itemRect.left+10;
|
GetParent()->ScreenToClient(wndRect);
|
||||||
nY=itemRect.bottom+12;
|
clientRect.OffsetRect(wndRect.left, wndRect.top);
|
||||||
nXc=tabRect.right-itemRect.left-2;
|
|
||||||
nYc=tabRect.bottom-nY+8;
|
|
||||||
|
|
||||||
if(lanlink.active==0) SetCurSel(0);
|
if(lanlink.active==0)
|
||||||
|
SetCurSel(0);
|
||||||
|
|
||||||
for(i=0;i<3;i++){
|
for(i=0;i<3;i++){
|
||||||
if(i==GetCurSel()){
|
if(i==GetCurSel()){
|
||||||
m_tabdialog[i]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);
|
m_tabdialog[i]->SetWindowPos(&wndTop, clientRect.left, clientRect.top, clientRect.Width(), clientRect.Height(), SWP_SHOWWINDOW);
|
||||||
} else {
|
} else {
|
||||||
m_tabdialog[i]->ShowWindow(SW_HIDE);
|
m_tabdialog[i]->ShowWindow(SW_HIDE);
|
||||||
}
|
}
|
||||||
|
@ -242,12 +460,14 @@ void LinkGeneral::OnRadio1()
|
||||||
{
|
{
|
||||||
m_type = 0;
|
m_type = 0;
|
||||||
lanlink.active = 0;
|
lanlink.active = 0;
|
||||||
|
GetParent()->Invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LinkGeneral::OnRadio2()
|
void LinkGeneral::OnRadio2()
|
||||||
{
|
{
|
||||||
m_type = 1;
|
m_type = 1;
|
||||||
lanlink.active = 1;
|
lanlink.active = 1;
|
||||||
|
GetParent()->Invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL LinkGeneral::OnInitDialog(){
|
BOOL LinkGeneral::OnInitDialog(){
|
||||||
|
|
|
@ -7,13 +7,35 @@
|
||||||
// LinkOptions.h : header file
|
// LinkOptions.h : header file
|
||||||
//
|
//
|
||||||
|
|
||||||
class CMyTabCtrl : public CTabCtrl
|
class CMyTabCtrl : public CTabCtrl {
|
||||||
{
|
DECLARE_DYNAMIC(CMyTabCtrl)
|
||||||
public:
|
public:
|
||||||
CMyTabCtrl(void);
|
CMyTabCtrl(void);
|
||||||
~CMyTabCtrl(void);
|
~CMyTabCtrl(void);
|
||||||
|
|
||||||
|
BOOL IsTabEnabled(int iTab); // you must override
|
||||||
|
BOOL TranslatePropSheetMsg(MSG* pMsg); // call from prop sheet
|
||||||
|
BOOL SubclassDlgItem(UINT nID, CWnd* pParent); // non-virtual override
|
||||||
|
|
||||||
|
// helpers
|
||||||
|
int NextEnabledTab(int iTab, BOOL bWrap); // get next enabled tab
|
||||||
|
int PrevEnabledTab(int iTab, BOOL bWrap); // get prev enabled tab
|
||||||
|
BOOL SetActiveTab(UINT iNewTab); // set tab (fail if disabled)
|
||||||
|
|
||||||
CDialog *m_tabdialog[3];
|
CDialog *m_tabdialog[3];
|
||||||
|
|
||||||
void OnSwitchTabs(void);
|
void OnSwitchTabs(void);
|
||||||
|
protected:
|
||||||
|
DECLARE_MESSAGE_MAP()
|
||||||
|
afx_msg void OnSelChanging(NMHDR* pNmh, LRESULT* pRes);
|
||||||
|
|
||||||
|
// MFC overrides
|
||||||
|
virtual BOOL PreTranslateMessage(MSG* pMsg);
|
||||||
|
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
|
||||||
|
|
||||||
|
// override to draw text only; eg, colored text or different font
|
||||||
|
virtual void OnDrawText(CDC& dc, CRect rc, CString sText, BOOL bDisabled);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -73,6 +95,8 @@ public:
|
||||||
// Overrides
|
// Overrides
|
||||||
// ClassWizard generated virtual function overrides
|
// ClassWizard generated virtual function overrides
|
||||||
//{{AFX_VIRTUAL(LinkOptions)
|
//{{AFX_VIRTUAL(LinkOptions)
|
||||||
|
public:
|
||||||
|
virtual BOOL PreTranslateMessage(MSG* pMsg);
|
||||||
protected:
|
protected:
|
||||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
||||||
//}}AFX_VIRTUAL
|
//}}AFX_VIRTUAL
|
||||||
|
|
Loading…
Reference in New Issue