Как отправить сообщение в диалоговый класс
Привет,
Я новичок в MFC, я использую поток и хочу отправить сообщение в класс диалога, используя этот поток(ThreadProc), чтобы я мог вызвать функцию в классе диалога, используя этот поток. Пожалуйста, скажите мне код сообщения, чтобы использовать.(Метод SendMessage(?????????????))
Думаю, мне нужно отправить "ON_CBN_SELCHANGE", а id - "IDC_PType" (Пожалуйста, прочтите код)
Танки
Вот этот код
// UMKurunegalaDlg.cpp : implementation file // #include "stdafx.h" #include "UMKurunegala.h" #include "UMKurunegalaDlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif static int Data_Of_Thread_1 = 1; static HANDLE Handle_Of_Thread = 0; int val = 0; void ThreadProc(void *param)// *** The thread i am using { int h=*((int*)param); SendMessage(?????????????????????????????????????????????????????); _endthread(); } /*DWORD WINAPI setBitThread(LPVOID lpParam) { CUMKurunegalaDlg::OnCbnEditchangePtype(); return 0; } */ // CAboutDlg dialog used for App About class CAboutDlg : public CDialogEx { public: CAboutDlg(); // Dialog Data enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CUMKurunegalaDlg dialog CUMKurunegalaDlg::CUMKurunegalaDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CUMKurunegalaDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CUMKurunegalaDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, teststt, testt); DDX_Control(pDX, IDC_VType, vtypec); DDX_Control(pDX, IDC_pricest, pricest); DDX_Control(pDX, IDC_VBrand, vbrandc); DDX_Control(pDX, IDC_VModel, vmodelc); DDX_Control(pDX, IDC_VPart, vpartc); DDX_Control(pDX, IDC_PType, ptypec); } BEGIN_MESSAGE_MAP(CUMKurunegalaDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_CBN_SELCHANGE(IDC_VType, &CUMKurunegalaDlg::OnCbnSelchangeVtype) ON_CBN_SELCHANGE(IDC_VBrand, &CUMKurunegalaDlg::OnCbnSelchangeVbrand) ON_CBN_SELCHANGE(IDC_VModel, &CUMKurunegalaDlg::OnCbnSelchangeVmodel) ON_CBN_SELCHANGE(IDC_VPart, &CUMKurunegalaDlg::OnCbnSelchangeVpart) ON_CBN_SELCHANGE(IDC_PType, &CUMKurunegalaDlg::OnCbnSelchangePtype) ON_CBN_EDITCHANGE(IDC_PType, &CUMKurunegalaDlg::OnCbnEditchangePtype) ON_CBN_CLOSEUP(IDC_PType, &CUMKurunegalaDlg::OnCbnCloseupPtype) END_MESSAGE_MAP()
xenotron
Простой ответ на ваш вопрос: Вы не можете отправить сообщение в класс.
Пожалуйста, прочтите учебник для начинающих C++, прежде чем переходить к продвинутым темам, таким как потоковая обработка и графический интерфейс, потому что в противном случае вы не сможете задать правильные вопросы и не сможете понять наши ответы.
PS: пожалуйста, не пишите дважды вопрос!
stib_markc
Простите меня, если я ошибаюсь, но я думаю, что он имел в виду, чтобы отправить сообщение в диалог из потока.
xenotron
- Да, я знаю. Но если он знает, в чем разница между классом и экземпляром, то он должен опубликовать какую-то другую часть кода. Вы просто не можете ответить на его вопрос, если он не знает основных терминов, и он хочет собрать что-то вместе, используя 2 относительно сложные вещи: threading и gui. В результате получается нечто, полное ошибок, если это вообще работает.
Я не думаю, что вы хотите начать учить его программировать на C++. Во всяком случае, мы ответили на его вопрос в другом посте, но он не мог этого понять.
wedagedara
ПРИВЕТ,
Я решил эту проблему, используя это в потоке
AfxGetApp()->m_pMainWnd->PostMessage(WM_APP+2,0,0);
и используя это в карте сообщений диалогового класса
ON_MESSAGE(WM_APP+2, &CUMKurunegalaDlg::testfunction)
Я просто хотел, чтобы вызвать функцию-член "UMKurunegalaDlg", используя какой-нить
Спасибо, что пытались мне помочь. (Я не хочу изучать c++ или время, чтобы изучить его, я просто хочу завершить свой дипломный проект, вот причина глупых вопросов, которые я задаю)
Хороший день
xenotron
Это нормально, PostMessage должен хорошо выполнять свою работу. Все еще не понимаю, почему это хорошо для вас или некоторых других учителей, если вы делаете что-то, чего на самом деле не понимаете. Но это выходит за рамки этой темы и вашей реальной задачи, это больше о том, как работают университеты...
Sergey Alexandrovich Kryukov
Вы, конечно, правы.
Моей первой реакцией было: "да ладно, это не совсем пустая болтовня" :-)
--СА
xenotron
ЛОЛ, это же умора! :-) Ты сделал мой день! :-)
Sergey Alexandrovich Kryukov
:-)
Richard MacCutchan
Я поддерживаю замечание пацторписти. Я бы также сказал, что вы неправильно используете диалог. Диалоговые окна-это всплывающие окна, используемые для получения информации от пользователя, а не для передачи информации между потоками. Диалог уже имеет встроенные методы для получения или установки данных, за которые он отвечает.