EditControl
|
lehha
Сообщения: n/a |
Добрый день!
Столкнулся с проблемой визуализации (всегда писал консольные приложения). Итак есть диалоговое окно IDD_DIALOG1, в нем есть editcontrol IDC_EDIT1, обявил объект CEdit *myEdit = new CEdit;, вопрос в следующем как мне связать myEdit и IDC_EDIT1, знаю что это просто) Спасибо за рание. |
|
Отправлено: 11:15, 20-12-2005 |
![]() Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать |
Отправлено: 14:57, 21-12-2005 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
lehha
Сообщения: n/a |
Да я пробовал так но у меня мало, что получилось, тогда я нашел в MSDN DoDataExchange(CDataExchange* pDX), проблема решилась сама собой..))
Но сейчас возникла другая( При нажатии кнопки ну скажем Ок у меня начинает выполнятся функция которая выводит результат своего действия как раз в этот Edit Control, но результат выводится по завершению работы функции. Искал что можно сделать, нашел что нужно как то создать отдельный поток для этой функции, в MSDN нашел HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ); Кто нить работал с этим “зверем”, помогите если есть опыт работы с подобными вещами, а то времени жалко пока до самого дойдет. Спасибо за ранние. |
Отправлено: 15:11, 21-12-2005 | #3 |
![]() Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать |
Отправлено: 08:57, 22-12-2005 | #4 |
lehha
Сообщения: n/a |
pva
_beginthread работает только с "отдельными" функциями, а у меня метод класса, если его определять как static, то это переписывать весь код и извращятся с передачей указателя на класс((, есть ли функции работающие с методами класса?? |
|
Отправлено: 09:33, 22-12-2005 | #5 |
![]() Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Проще простого:
class Thread { HANDLE hthread; static __stdcall gmain(Thread* thr) { try { thr->main(); } catch(...) { abort(); } } public: Thread() : hthread() {} ~Thread() {CloseHandle(hthread);} void start() { // раздельно от конструктора, чтобы дать построиться синхронно. // уничтожать лучше тоже синхронно, т.е. сборщиком мусора. // не желательно объявлять Thread автоматической переменной. // я про параметр просто забыл в аргументах написать hthread = (HANDLE)_beginthread((void(*)(void*))gmain, this, 0x1000); } protected: virtual void main() = 0; }; ... class MyThread : public Thread { void main() { ... } } MyThread* my_thread = new MyThread(); my_thread->start(); |
Отправлено: 11:37, 22-12-2005 | #6 |
![]() Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать А ещё вот как придумал:
struct thr_start_struct { Object* obj; void (Object*::mbr)(); }; void threaded_proc(thr_start_struct* st) { (st->obj->*st->mbr)(); } void start_threaded(Object* obj1, void (Object*::mbr1)()) { thr_start_struct st; st.obj = obj1; st.mbr = mbr1; _beginthread((void(*)(void*))threaded_proc, &st, 0x10000); } ... class A : public Object { void priv_foo() { ... } public: void foo() { ... } void parallel_it() { start_threaded(this, (void(Object::*)())priv_foo); } }; start_threaded(this, (void(Object::*)())foo); |
Отправлено: 11:45, 22-12-2005 | #7 |
lehha
Сообщения: n/a |
Спасибо огромное буду пробовать
|
Отправлено: 12:15, 22-12-2005 | #8 |
lehha
Сообщения: n/a |
Итак сделал следующее:
class CDlg : public CDialog { public: . . . void SetEditString(CString cStr); friend DWORD WINAPI FGetInfo(HANDLE lpParam); afx_msg void OnStart(void); . . private: HANDLE hThread; DWORD dwThreadId; DECLARE_MESSAGE_MAP(); }; . . . void CDlg::OnStart() { hThread = CreateThread(NULL,NULL,FGetInfo,this,0,&dwThreadId); } . . . DWORD WINAPI FGetInfo(HANDLE lpParam) { . . . //пытаюсь обратиться к указателю и вызвоть метод класса lpParam->SetEditString(asd); . . . } error C2227: left of '->SetEditString' must point to class/struct/union type is 'HANDLE' В чем моя ошибка, как я понимаю hThread = CreateThread(NULL,NULL,FGetInfo,this,0,&dwThreadId); передает this и потом я могу через него обращятся к членам класса, или я заблуждаюсь?? Поправте меня плиз. |
Отправлено: 16:25, 22-12-2005 | #9 |
lehha
Сообщения: n/a |
Победил это так:
DWORD WINAPI FGetInfo(LPVOID lpParam) { CDlg *myDlg = (CDlg*)lpParam; ... ... myDlg->SendMessage(WM_MYMESSAGE,WPARAM("Сообщение"),0); ... } #define WM_MYMESSAGE (WM_USER+100) .... .... BEGIN_MESSAGE_MAP(CDlg, CDialog) ON_MESSAGE(WM_MYMESSAGE, OnUpdate) END_MESSAGE_MAP() LRESULT CDlg::OnUpdate(WPARAM wParam,LPARAM lParam) { m_pEdit+=(LPCTSTR)wParam; m_pEdit+="\r\n"; UpdateData(FALSE); return 0; } Спасибо всем. |
Отправлено: 13:29, 23-12-2005 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
|