Что я пытаюсь сделать, это создать элемент управления и процедуру редактирования внутри класса. Я пробовал разные вещи и пытался использовать части аналогичного вопроса, которые я задал: Win32 C++ Create a Window and Procedure Within a Class.Процедура управления C++ Win32 в классе
В настоящий момент я их разделил.
main_class.h
class MainClass {
private:
HWND hwndMain; // main windows handle
HINSTANCE hInstanceMain; // main windows instance
HWND hTextarea;
public:
bool init(HWND _hwnd, HINSTANCE _hInstance);
bool ShowInfoTextarea();
};
main_class.cpp
// Heres the question
bool MainClass::ShowInfoTextarea() {
if (hTextarea != NULL) return true; // if it is not null, the textarea is likely already displayed.
// Creating the EDIT textarea
hTextarea = CreateWindowEx(0, L"EDIT", L"",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,
SCREEN_WIDTH+5, 0, WINDOW_WIDTH-SCREEN_WIDTH-10, WINDOW_HEIGHT-30, hwndMain, (HMENU)IDC_CTRL_EDIT, GetModuleHandle(NULL), NULL);
if (hTextarea == NULL) { MessageBox(NULL, L"Could not create the test text control. The program will now close.", NULL, MB_OK | MB_ICONEXCLAMATION); return false; }
// Dozens of attempts with something like:
// lpEditWndProc = (WNDPROC)SetWindowLongPtr(hTextarea, GWLP_WNDPROC, (LONG_PTR)EditControlProc);
// lpEditWndProc = (WNDPROC)SetWindowLongPtr(hTextarea, GWLP_WNDPROC, (LONG_PTR)MainClass::EditControlProc);
// tried static callback functions, etc.
//Every try the compiler said: Are there missing braces () with EditControlProc
}
// To get working, I separated:
WNDPROC lpEditWndProc;
LRESULT CALLBACK EditControlProc(HWND hwndEdit, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
default:
return CallWindowProc(lpEditWndProc, hwndEdit, uMsg, wParam, lParam);
}
return 0; // DONE
}
С моим (различные) пытается компилятор сказал: Есть ли отсутствующие скобки() с EditControlProc, или указанный тип рассогласование при попытке определить lpEditWndProc.
Возможно, я пропустил что-то простое?
Useage:
main.cpp
MainClass mainclass;
mainclass.ShowInfoTextarea();
Спасибо. Если отсутствует какая-либо информация, дайте мне знать.
Является 'EditControlProc' функция член класса? Если это так, его нужно объявить как «статический». Также посмотрите на использование 'SetWindowSubclass', а не' SetWindowLongPtr'. –