Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передача аргумента в функции 
:(
    Опции темы
maq
Дата 10.7.2008, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 28.10.2005

Репутация: нет
Всего: нет



При передаче переменной в качестве параметра функции я не могу манипулировать (изменять) ее значением.

Переменная класса RlistCtrl посылает WM_NOTIFY сообщение родительскому окну, а в качестве параметра посылает указатель на переменную LPWSTR для изменения.
Родительское окно меняет значение переменной.
При вызове 
return TRUE 
в классе RlistCtrl, выдается ошибка 
HEAP CORRUPTION DETECTED: after normal block ... CRT detected that the application wrote to memory after end of heap buffer.

BOOL RListCtrl::EditValidate(void)
{
    CString sItem;
    pEdit->GetWindowText(sItem);
    LPWSTR lStr = sItem.GetBuffer();

    NMHDR* pNMHDR = new NMHDR;
    pNMHDR->hwndFrom    = m_hWnd;
    pNMHDR->idFrom        = (UINT_PTR) lStr;
    pNMHDR->code        = UDM_LC_VALIDATE;

    LRESULT pResult = GetParent()->SendMessage(WM_NOTIFY, GetDlgCtrlID(), (LPARAM) pNMHDR);
    if(pResult == 0)
    {
        pEdit->SetWindowText(sItem);
        pEdit->SetModify(TRUE);
    }
    
    if(pResult == 0)
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}

BOOL VPTransD1Card::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
    NMHDR* pNMHDR = (NMHDR*) lParam;
    if(pNMHDR)
    {
        if(pNMHDR->code == UDM_LC_VALIDATE)
        {
            LPWSTR p = (LPWSTR) pNMHDR->idFrom;
            CString s1;
            s1.Format(_T("%d"), 90);
            wcscpy_s(p, s1.GetLength()*2, s1);


            return 0;
        }
    }

    return VCard::OnNotify(wParam, lParam, pResult);
}
PM MAIL   Вверх
deniska
Дата 11.7.2008, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 398
Регистрация: 1.7.2005
Где: Троицк

Репутация: 1
Всего: 0



Код

BOOL RListCtrl::EditValidate(void)
{
    TCHAR или wchar_t sItem[скока тебе надо];
    pEdit->GetWindowText(sItem,скока указал выше);

    NMHDR* pNMHDR = new NMHDR;
    pNMHDR->hwndFrom    = m_hWnd;
    pNMHDR->idFrom        = (UINT_PTR) sItem;

одно условие: проект должен быть собран с use unicode character set, иначе нужно делать преобразования из char в wchar_t



Это сообщение отредактировал(а) deniska - 11.7.2008, 07:37
PM MAIL ICQ   Вверх
maq
Дата 14.7.2008, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 28.10.2005

Репутация: нет
Всего: нет



deniska, спасибо, заработало! smile 

но мне просто интересно, а почему я не могу использовать CString, а именно wchar_t[x]?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0953 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.