Сообщение от
_empty
А зачем ты текст через dc отрисовываешь? Ты же используешь стандартные компоненты, поэтому используй Editbox или его производные, какой средой пользуешься?
спасибо за совет. в общем принял во внимание и вот к чему дошел:
http://www.gfs-team.ru/?act=articles&pact=122
только вот у меня это отдельное диалоговое окно в приложении, которое открывается по нажатии ОПЕН.
1) создал класс
class COpenDialog : public CDialog
Код:
class COpenDialog : public CDialog
{
public:
afx_msg BOOL OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message );
COpenDialog(CWnd* pParent = NULL);
enum { IDD = IDD_DIALOG_OPEN};
CEdit m_EditOpen;
CEdit m_bOpen;
protected:
virtual void DoDataExchange(CDataExchange* pDX);
protected:
virtual void OnOK();
virtual void OnCancel();
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnStnClickedBitmap1();
};
COpenDialog::COpenDialog(CWnd* pParent)
: CDialog(COpenDialog::IDD, pParent)
{
}
void COpenDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_OPEN_PATH, m_EditOpen);
DDX_Control(pDX, IDC_OPEN_TEXT, m_bOpen);
}
BEGIN_MESSAGE_MAP(COpenDialog, CDialog)
ON_WM_PAINT()
ON_WM_SETCURSOR()
ON_STN_CLICKED(IDB_BITMAP1, &COpenDialog::OnStnClickedBitmap1)
END_MESSAGE_MAP()
///////////////////////////////////////////////////////////////////////////
BOOL COpenDialog:: OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
----bla bla bla
}
/////////////////////////////////////////////////////////////////////////////
void COpenDialog::OnPaint()
{
----bla bla bla
}
void COpenDialog::OnOK()
{
CString m_EditText;
// TODO: Add your control notification handler code here
CString fname; //Переменная для хранения имени файла
CFile file; //обьект класса CFile
char ch[1024]; //Буффер для чтения данных из файла
if(!OpenRead) //Если OpenRead=false то показываем диалог открытия файлов
{
CFileDialog fDialog(TRUE);
fDialog.DoModal();
m_EditOpen.SetWindowText(fDialog.GetPathName());
m_bOpen.SetWindowText("Read");
OpenRead = true;
}
else
{
m_EditOpen.GetWindowText(fname); //Получаем имя файла
if(!file.Open(fname, CFile::modeRead, NULL)) //Открываем его
{
AfxMessageBox("Cannot open file");
return;
}
file.Read(&ch, 1024); //Читаем 1024 байт
//m_EditText.SetWindowText(ch);
file.Close(); //Закрываем файл
m_bOpen.SetWindowText("Open");//Меняем текст кнопки
OpenRead = false;
}
CDialog::OnOK();
}
void COpenDialog::OnCancel()
{
CDialog::OnCancel();
}
BOOL COpenDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_EditOpen.SetWindowText(CString("файл"));
m_bOpen.SetWindowText(CString("содержимое"));
UpdateData(false);
OpenRead = false;
return TRUE;
}
и подправил функцию ОПЕН с мейнфрейма, чтоб она вызывала диалог:
Код:
void CMyFrameWin::OnOpen()
{
COpenDialog dialog;
if(dialog.DoModal()==IDOK);
}
при компиле имеем ошибку в строчке
m_EditText.SetWindowText(ch);
которую устранил пока лиш тем что закомментировал...
суть ошибки :
Код:
'SetWindowTextA' : is not a member of 'ATL::CStringT<BaseType,StringTraits>'
в чем собственно трабла у как устранить данную проблему?
среда разработки - Visual Studio 2008
Спасибо всем кто откликнется.
--------------------EDIT---------------------
Спасибо за консультацию по аське
groupby
проблема была в:
"m_EditText иметт тип CString
а должен иметь тип CEdit"
--------------------EDIT---------------------