我用mfc向导生成了一个基于文档/视图的但文档程序
是向4x4的矩形里添加颜色,颜色的命令消息由文档处理,
但是奇怪的是其他颜色都好用只是黄色不好用(更新也不好用)
我很无奈请大家帮帮忙看看有什么不对,还是其他地方可能有错
我没用RANGE
// SquaresDoc.cpp : implementation of the CSquaresDoc class
//#include "stdafx.h"
#include "SdiSquares.h"#include "SquaresDoc.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CSquaresDocIMPLEMENT_DYNCREATE(CSquaresDoc, CDocument)BEGIN_MESSAGE_MAP(CSquaresDoc, CDocument)
//{{AFX_MSG_MAP(CSquaresDoc)
ON_COMMAND(ID_COLOR_RED, OnColorRed)
ON_COMMAND(ID_COLOR_YELLOW, OnColorYellow)
ON_COMMAND(ID_COLOR_BLUE, OnColorBlue)
ON_COMMAND(ID_COLOR_CYAN, OnColorCyan)
ON_COMMAND(ID_COLOR_GREEN, OnColorGreen)
ON_COMMAND(ID_COLOR_WHITE, OnColorWhite)
ON_UPDATE_COMMAND_UI(ID_COLOR_BLUE, OnUpdateColorBlue)
ON_UPDATE_COMMAND_UI(ID_COLOR_CYAN, OnUpdateColorCyan)
ON_UPDATE_COMMAND_UI(ID_COLOR_GREEN, OnUpdateColorGreen)
ON_UPDATE_COMMAND_UI(ID_COLOR_RED, OnUpdateColorRed)
ON_UPDATE_COMMAND_UI(ID_COLOR_WHITE, OnUpdateColorWhite)
ON_UPDATE_COMMAND_UI(ID_COLOR_YELLOW, OnUpdateColorYellow)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CSquaresDoc construction/destructionCSquaresDoc::CSquaresDoc()
{
// TODO: add one-time construction code here}CSquaresDoc::~CSquaresDoc()
{
}BOOL CSquaresDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE; for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
m_clrGrid[i][j]=RGB(255,255,255);

m_clrCurrentColor=RGB(255,255,255);
// (SDI documents will reuse this document) return TRUE;
}/////////////////////////////////////////////////////////////////////////////
// CSquaresDoc serializationvoid CSquaresDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
ar<<m_clrGrid[i][j];
ar<<m_clrCurrentColor;
}
else
{
// TODO: add loading code here
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
ar>>m_clrGrid[i][j];
ar>>m_clrCurrentColor;
}
}/////////////////////////////////////////////////////////////////////////////
// CSquaresDoc diagnostics#ifdef _DEBUG
void CSquaresDoc::AssertValid() const
{
CDocument::AssertValid();
}void CSquaresDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////
// CSquaresDoc commandsvoid CSquaresDoc::SetSquare(int i, int j, COLORREF color)
{
ASSERT(i>=0&&i<=3&&j>=0&&j<=3);
m_clrGrid[i][j]=color;
SetModifiedFlag(TRUE);
UpdateAllViews(NULL);
}COLORREF CSquaresDoc::GetCurrentColor()
{
return m_clrCurrentColor;
}COLORREF CSquaresDoc::GetSquare(int i, int j)
{
ASSERT(i>=0&&i<=3&&j>=0&&j<=3);
return m_clrGrid[i][j];
}void CSquaresDoc::OnColorYellow() 
{
m_clrCurrentColor=RGB(255,255,0);
}void CSquaresDoc::OnColorRed() 
{
m_clrCurrentColor=RGB(255,0,0);
}void CSquaresDoc::OnColorBlue() 
{
m_clrCurrentColor=RGB(0,0,255);
}void CSquaresDoc::OnColorCyan() 
{
m_clrCurrentColor=RGB(0,255,255);
}void CSquaresDoc::OnColorGreen() 
{
m_clrCurrentColor=RGB(0,255,0);
}void CSquaresDoc::OnColorWhite() 
{
m_clrCurrentColor=RGB(255,255,255);
}void CSquaresDoc::OnUpdateColorBlue(CCmdUI* pCmdUI) 
{
pCmdUI->SetRadio(m_clrCurrentColor==RGB(0,0,255));
}void CSquaresDoc::OnUpdateColorCyan(CCmdUI* pCmdUI) 
{
pCmdUI->SetRadio(m_clrCurrentColor==RGB(0,255,255));
}void CSquaresDoc::OnUpdateColorGreen(CCmdUI* pCmdUI) 
{
pCmdUI->SetRadio(m_clrCurrentColor==RGB(0,255,0));
}void CSquaresDoc::OnUpdateColorRed(CCmdUI* pCmdUI) 
{
pCmdUI->SetRadio(m_clrCurrentColor==RGB(255,0,0));
}void CSquaresDoc::OnUpdateColorWhite(CCmdUI* pCmdUI) 
{
pCmdUI->SetRadio(m_clrCurrentColor==RGB(255,255,255));
}void CSquaresDoc::OnUpdateColorYellow(CCmdUI* pCmdUI) 
{
pCmdUI->SetRadio(m_clrCurrentColor==RGB(255,255,0));
}

解决方案 »

  1.   

    谢谢了
    不过我没贴错我真的是不知哪里错了
    除了黄色其他的都好用
    帮帮忙想想还哪里错了
    我把doc也贴出来
    // SquaresDoc.h : interface of the CSquaresDoc class
    //
    /////////////////////////////////////////////////////////////////////////////#if !defined(AFX_SQUARESDOC_H__7BA6109C_99C6_4644_97BE_7D00663B2F61__INCLUDED_)
    #define AFX_SQUARESDOC_H__7BA6109C_99C6_4644_97BE_7D00663B2F61__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    class CSquaresDoc : public CDocument
    {
    protected: // create from serialization only
    CSquaresDoc();
    DECLARE_DYNCREATE(CSquaresDoc)// Attributes
    public:// Operations
    public:// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CSquaresDoc)
    public:
    virtual BOOL OnNewDocument();
    virtual void Serialize(CArchive& ar);
    //}}AFX_VIRTUAL// Implementation
    public:
    COLORREF GetSquare(int i,int j);
    COLORREF GetCurrentColor();
    void SetSquare(int i,int j,COLORREF color);
    virtual ~CSquaresDoc();
    #ifdef _DEBUG
    virtual void AssertValid() const;
    virtual void Dump(CDumpContext& dc) const;
    #endifprotected:// Generated message map functions
    protected:
    COLORREF m_clrCurrentColor;
    COLORREF m_clrGrid[4][4];
    //{{AFX_MSG(CSquaresDoc)
    afx_msg void OnColorRed();
    afx_msg void OnColorBlue();
    afx_msg void OnColorCyan();
    afx_msg void OnColorGreen();
    afx_msg void OnColorWhite();
    afx_msg void OnColorYellow();
    afx_msg void OnUpdateColorBlue(CCmdUI* pCmdUI);
    afx_msg void OnUpdateColorCyan(CCmdUI* pCmdUI);
    afx_msg void OnUpdateColorGreen(CCmdUI* pCmdUI);
    afx_msg void OnUpdateColorRed(CCmdUI* pCmdUI);
    afx_msg void OnUpdateColorWhite(CCmdUI* pCmdUI);
    afx_msg void OnUpdateColorYellow(CCmdUI* pCmdUI);
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    };///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_SQUARESDOC_H__7BA6109C_99C6_4644_97BE_7D00663B2F61__INCLUDED_)
      

  2.   

    看看ID_COLOR_YELLOW消息是否响应或是否收到