#include "stdafx.h"
#include "tuxian.h"
#include "tuxianDlg.h"
#include<string>
//#include<stdlib>
//#include<stdio>
#include<iostream>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CTuxianDlg::CTuxianDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTuxianDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTuxianDlg)
m_strfile = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CTuxianDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTuxianDlg)
DDX_Control(pDX, IDC_CLEAN_BUTTON, m_cleanbtn);
DDX_Control(pDX, IDC_PICTURE_STATIC, m_bmppicture);
DDX_Control(pDX, IDC_SAVE_BUTTON, m_savebtn);
//DDX_Control(pDX, IDC_FILE_LIST, m_listfile);
DDX_Control(pDX, IDC_DRIVER_COMBO, m_drivercombo);
DDX_Control(pDX, IDC_BROWSE_BUTTON, m_browse);
// DDX_LBString(pDX, IDC_FILE_LIST, m_strfile);
//}}AFX_DATA_MAP
}BEGIN_MESSAGE_MAP(CTuxianDlg, CDialog)
//{{AFX_MSG_MAP(CTuxianDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BROWSE_BUTTON, OnBrowseButton)
ON_BN_CLICKED(IDC_ACQUIRE_BUTTON, OnAcquireButton)
ON_EN_CHANGE(IDC_FILENAME_EDIT, OnChangeFilenameEdit)
ON_CBN_SELCHANGE(IDC_DRIVER_COMBO, OnSelchangeDriverCombo)
// ON_LBN_SELCHANGE(IDC_FILE_LIST, OnSelchangeFileList)
ON_BN_CLICKED(IDC_16BIT_RADIO, On16bitRadio)
ON_BN_CLICKED(IDC_BMP_RADIO, OnBmpRadio)
ON_BN_CLICKED(IDC_GIF_RADIO, OnGifRadio)
ON_BN_CLICKED(IDC_JPEG_RADIO, OnJpegRadio)
ON_BN_CLICKED(IDC_PICTURE_STATIC, OnPictureStatic)
ON_BN_CLICKED(IDC_CLEAN_BUTTON, OnCleanButton)
ON_COMMAND(ID_OPEN_MENU, OnOpenMenu)
ON_COMMAND(ID_CLOSE_MENU, OnCloseMenu)
ON_BN_CLICKED(IDC_SAVE_BUTTON, OnSaveButton)
ON_COMMAND(ID_SAVE_MENU, OnSaveMenu)
ON_COMMAND(IDC_RGB_COLOR, OnRgbColor)
ON_COMMAND(IDC_VSSCORLL_MENU, OnVsscorllMenu)
ON_COMMAND(IDC_HSSCROLL_MENU, OnHsscrollMenu)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CTuxianDlg message handlers
BOOL CTuxianDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog.  The framework does this automatically
//  when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon各位高人,怎么弄啊?
Alt+F7
HWND CDataExchange::PrepareCtrl(int nIDC)
{
ASSERT(nIDC != 0);
ASSERT(nIDC != -1); // not allowed
HWND hWndCtrl;
m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
if (hWndCtrl == NULL)
{
TRACE1("Error: no data exchange control with ID 0x%04X.\n", nIDC);
-> ASSERT(FALSE);
AfxThrowNotSupportedException(); }nIDC 1006

解决方案 »

  1.   

    是不是在资源编辑器上你把某个控件给DEL了?
      

  2.   

    我也出现过类似的问题,就是因为你可能修改了资源的ID号。
    备份工程,然后,保存资源文件(.rc),删除对话框资源,新创建一个对话框,摆放相应的控件,然后修改资源文件的对话框属性为之前对话框的属性,重新编译试试看!
      

  3.   


    HWND CDataExchange::PrepareCtrl(int nIDC)
    {
    ASSERT(nIDC != 0);
    ASSERT(nIDC != -1); // not allowed
    HWND hWndCtrl;
    m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
    if (hWndCtrl == NULL)
    {
    TRACE1("Error: no data exchange control with ID 0x%04X.\n", nIDC);
    ASSERT(FALSE);
    AfxThrowNotSupportedException();
    }
    m_hWndLastControl = hWndCtrl;
    m_bEditLastControl = FALSE; // not an edit item by default
    ASSERT(hWndCtrl != NULL);   // never return NULL handle
    return hWndCtrl;这是我看到的定义
      

  4.   

    我已经根据nIDC的值1006把删除控件的部分给屏蔽了啊
      

  5.   

    设置一下断点,看在那个ASSERT的时候抛出异常
    m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);如果你的对话框上这个nIDC被删除了,就会进入下面的if判断里面
    if (hWndCtrl == NULL)
    {
    ……
    ASSERT(FALSE);
      

  6.   

    查看出现问题的时候 nIDC 的值是多少,根据这个值到 resource.h 中查找看是哪个控件,确保你屏蔽的 DoDataExchange 的对象是正确的,完全重新 build 一次试一试。
      

  7.   

    应该是你把这个资源在.rc中删除了吧,在ddx那里调试看看是哪个资源
      

  8.   

    void CTuxianDlg::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    AfxMessageBox(str);
    //AfxMessageBox((LPCTSTR)m_hIcon);
    //{{AFX_DATA_MAP(CTuxianDlg)
    DDX_Control(pDX, IDC_CLEAN_BUTTON, m_cleanbtn);
    DDX_Control(pDX, IDC_SAVE_BUTTON, m_savebtn);
    DDX_Control(pDX, IDC_DRIVER_COMBO, m_drivercombo);
    DDX_Control(pDX, IDC_BROWSE_BUTTON, m_browse); //}}AFX_DATA_MAP 
    }
      

  9.   

    什么意思?对话框内容在 .rc 文件和 resource.h 中。
      

  10.   

    建议你用动态的方法去获得指向一个控件变量的指针来操作,比如可以定义一个 CEdit* m_pEdit;
    在oninitdialog中
    m_pEdit = (CEdit*)GetDlgItem(...);然后 ASSERT(m_pEdit != NULL);这样只要你的控件在就基本不会错,而且容易排查:)
      

  11.   

    在Resource View中,查看资源文件,只有0 icon显示。