我在利用组合框做一个小程序的时候,在使用SetItemData,GetItemData时,对m_DrawPattern变量不解,程序如下:
BOOL CComboDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CString str[6]={"水平线","竖直线","向下斜线","向上斜线","十字线","交叉线"};
int nIndex;
for(int i=0;i<6;i++)
{
nIndex=m_Pattern.AddString(str[i]);
m_Pattern.SetItemData(nIndex,i);
}
m_Pattern.SetCurSel(0);
m_DrawPattern=0;//变量在此处 return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CComboDlg::OnSelchangePattern()
{
int nIndex=m_Pattern.GetCurSel();
if(nIndex!=CB_ERR)
m_DrawPattern=m_Pattern.GetItemData(nIndex);
Invalidate( );
}
}
void CComboDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CWnd* pWnd=GetDlgItem(IDC_DRAW);
pWnd->UpdateWindow( );
CDC* pDC=pWnd->GetDC();
CBrush drawBrush;
drawBrush.CreateHatchBrush(m_DrawPattern,RGB(0,0,0));
CBrush* pOldBrush=pDC->SelectObject(&drawBrush); CRect rcClient;
pWnd->GetClientRect(rcClient);
pDC->Rectangle(rcClient);
pDC->SelectObject(pOldBrush);
// Do not call CDialog::OnPaint() for painting messages
}
m_DrawPattern是如何声明的,它是如何传入void CComboDlg::OnPaint() 中的。
为什么,我在编译时总有m_DrawPattern未定义的提示。
BOOL CComboDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CString str[6]={"水平线","竖直线","向下斜线","向上斜线","十字线","交叉线"};
int nIndex;
for(int i=0;i<6;i++)
{
nIndex=m_Pattern.AddString(str[i]);
m_Pattern.SetItemData(nIndex,i);
}
m_Pattern.SetCurSel(0);
m_DrawPattern=0;//变量在此处 return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CComboDlg::OnSelchangePattern()
{
int nIndex=m_Pattern.GetCurSel();
if(nIndex!=CB_ERR)
m_DrawPattern=m_Pattern.GetItemData(nIndex);
Invalidate( );
}
}
void CComboDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CWnd* pWnd=GetDlgItem(IDC_DRAW);
pWnd->UpdateWindow( );
CDC* pDC=pWnd->GetDC();
CBrush drawBrush;
drawBrush.CreateHatchBrush(m_DrawPattern,RGB(0,0,0));
CBrush* pOldBrush=pDC->SelectObject(&drawBrush); CRect rcClient;
pWnd->GetClientRect(rcClient);
pDC->Rectangle(rcClient);
pDC->SelectObject(pOldBrush);
// Do not call CDialog::OnPaint() for painting messages
}
m_DrawPattern是如何声明的,它是如何传入void CComboDlg::OnPaint() 中的。
为什么,我在编译时总有m_DrawPattern未定义的提示。
解决方案 »
- 求即时通(IM)的源码?
- 用MFC,如何在界面的一个矩形中填充黑色(矩形不是画图画出来的)?
- 请教activex注册失败但没有任何返回信息的问题
- 关于文件上传下载中vc与JAVA通信的问题
- 怎样在程序中动态的生成HTML代码,然后以网页的形式在视图中显示出来。
- 问,为什么事件接口_IDataEvents中的ModifyData方法,在IDL中没有了呢???
- 急、急、急!高手请进来!在线等待。急啊!
- 请问,如何在mapinfo中显示地图的经纬度?
- ●●VC6.0里的“Version”资源究竟如何使用?哪里有详细的介绍?●●
- 帮帮忙!!!!急急急!!用getfile能下载文件夹吗??
- 在CListCtrl如何得到我选择的行的Item号?
- 菜鸟送分小问题~~~~????????????
当你OnSelchangePattern的时候更改了m_DrawPattern并且使用Invalidate,Invalidate使窗口无效,引起OnPaint(),此时,m_DrawPattern已经传入了OnPaint()建议你看看MFC基础编程方面的书吧
From your code ,I think m_DrawPattern is a member varible of CComboDlg.
Or it is a global variable.
Are you not declare this varible in your class?
Or you copy the code of others ,or something others?