Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Контекстное меню.

10K
17 апреля 2007 года
nuhop
50 / / 24.03.2007
Как в диалоговое окно добавить контекстное меню, как в notepade?
320
17 апреля 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: nuhop
Как в диалоговое окно добавить контекстное меню, как в notepade?


1.Создаешь в Resource View меню,какое тебе надо.
2.Добавляешь в класс диалога 2 переменные CPoint point и CMenu m_menu.Делаешь их private.
3.В ф-ии OnInitDialog дописываешь

 
Код:
...
 m_menu.LoadMenu(IDR_MENU1);
...

Это загрузка меню из ресурсов.
3.В Messages класса диалога добаляешь ф-ию
 
Код:
OnContextMenu
.Она выглядит так.
 
Код:
void CcontextDlg::OnContextMenu(CWnd* /*pWnd*/, CPoint cp)
{
  point.x=cp.x;
  point.y=cp.y;
  m_menu.GetSubMenu(0)->TrackPopupMenu(IDR_MENU1 ,point.x,point.y,this);
}

Теперь щелкая правую кнопку мыши на диалоге вызывашь твое контекстное меню.
10K
18 апреля 2007 года
nuhop
50 / / 24.03.2007
Попробую разобраться.
10K
30 апреля 2007 года
nuhop
50 / / 24.03.2007
Если мне нужна команда Copy или Paste, то мне нужно самому создавать функции копирования или вставки или же есть встроенные?

Когда делаю, как ниже, то не работает.

В карте сообщений:

 
Код:
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)


Cама функция:

 
Код:
void MyDlg::OnEditCopy()
{
  ob_copy.Copy(); // Объект создан ранее - CEdit ob_copy;
}


Как правильно пользоваться этими CEdit Clipboard Operations?
320
30 апреля 2007 года
m_Valery
1.0K / / 08.01.2007
Ф-ии для работы с блоками текста
void Clear( );
// Удаляет выделенный текст, если он существует.
void Copy( );
// Копируем выделенный текст, если он существует, в буфер обмена.
void Cut( );
// Вырезает выделенный текст в текстовом поле и копирует его в
// буфер обмена.
void Paste( );
// Вставляет данные из буфера обмена в текстовое поле в текущую позицию курсора.
BOOL Undo( );
// Отменяет последнюю операцию, произведенную в текстовом поле.
BOOL CanUndo( );
// Позволяет определить возможно ли отменить последнюю операцию в
// текстовом поле (в этом случае возвращает истину).
void EmpryUndoBuffer( );
// Производит сброс флага отмены последней операции
10K
01 мая 2007 года
nuhop
50 / / 24.03.2007
Мне бы пример с Copy или Paste. :)
10K
01 мая 2007 года
nuhop
50 / / 24.03.2007
Код:

Код:
void MyDlg::OnEditCopy()
{
    CString str;
    CEdit m_edit;  // Это к примеру

    m_edit.GetSel();
    m_edit.GetWindowText(str);

    if (OpenClipboard())
    {
        HGLOBAL cpbuf;
        char *buf;
        EmptyClipboard();
        cpbuf = GlobalAlloc(GMEM_DDESHARE, str.GetLength()+1);
        buf = (char*) GlobalLock(cpbuf);
        strcpy(buf, LPCSTR(str));
        GlobalUnlock(cpbuf);
        SetClipboardData(CF_TEXT, cpbuf);
        CloseClipboard();
    }
}


Здесь падаю:
 
Код:
// AFXWIN2.INL

_AFXWIN_INLINE DWORD CEdit::GetSel() const
    { ASSERT(::IsWindow(m_hWnd)); return ::SendMessage(m_hWnd, EM_GETSEL, 0, 0); }


Почему падаю?
320
01 мая 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: nuhop
Код:

Код:
void MyDlg::OnEditCopy()
{
    CString str;
    CEdit m_edit;  // Это к примеру

    m_edit.GetSel();
    m_edit.GetWindowText(str);

    if (OpenClipboard())
    {
        HGLOBAL cpbuf;
        char *buf;
        EmptyClipboard();
        cpbuf = GlobalAlloc(GMEM_DDESHARE, str.GetLength()+1);
        buf = (char*) GlobalLock(cpbuf);
        strcpy(buf, LPCSTR(str));
        GlobalUnlock(cpbuf);
        SetClipboardData(CF_TEXT, cpbuf);
        CloseClipboard();
    }
}

...


Что делает эта функция ? Что за переменная CEdit m_edit ? m_edit - должна быть контрол-переменная,а у тебя она локальная переменная
типа Edit и все,как она выделяет и считывает текст из определенного
текстового поля,как она с текст.полем связана ? Никак.
Что вообще надо делать ? Копировать содержимое текстового поля в буфер ?
Допустим есть текстовое поле и контрол-переменная CEdit edit.
Набираю в текстовом поле текст,выделяю какую то его часть.

 
Код:
...
  edit.Copy();
...

запишет в буфер выделенный текст.Если его надо перенести в какое то
другое поле,то контрол переменная второго поля вставит выделенный
текст.
 
Код:
...
edit2.Paste();
...
10K
02 мая 2007 года
nuhop
50 / / 24.03.2007
m_Valery, спасибо. Полностью согласен с замечаниями. Мне надо было в ::DoDataExchange определить переменную типа control. Тогда действительно все работает.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог