16,472
社区成员
发帖
与我相关
我的任务
分享
# include <windows.h>
# include <iostream>
using namespace std;
class EditControl
{
private:
int Edit1;
WNDPROC OldEditProc;
HWND hEdit;
public:
EditControl();
~EditControl();
void CreateEdit(HWND hwnd, HINSTANCE hInst);
static LRESULT CALLBACK EditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
};
EditControl::EditControl()
{
Edit1 = 1;
OldEditProc = NULL;
}
EditControl::~EditControl()
{
}
void EditControl::CreateEdit(HWND hwnd, HINSTANCE hInst)
{
hEdit = CreateWindow(L"Edit", NULL, WS_CHILD|WS_VISIBLE|WS_BORDER|ES_LEFT|ES_MULTILINE, 10,10,100,100,hwnd, (HMENU)Edit1, hInst, NULL);
OldEditProc = (WNDPROC)SetWindowLong(hEdit, GWL_WNDPROC, (LONG)EditProc);
}
LRESULT CALLBACK EditControl::EditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(uMsg)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
SelectObject(hdc, CreatePen(PS_SOLID, 1, RGB(255, 0, 0)));
RoundRect(hdc, rect.left, rect.top, rect.right, rect.bottom, 10, 10);
EndPaint(hwnd, &ps);
break;
}
return CallWindowProc((WNDPROC)OldEditProc, hwnd, uMsg, wParam, lParam);//这里错误
}
# include <windows.h>
# include <iostream>
using namespace std;
class EditControl
{
private:
int Edit1;
static WNDPROC OldEditProc; //声明
HWND hEdit;
public:
EditControl();
~EditControl();
void CreateEdit(HWND hwnd, HINSTANCE hInst);
static LRESULT CALLBACK EditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
};
WNDPROC EditControl::OldEditProc; //定义
EditControl::EditControl()
{
Edit1 = 1;
OldEditProc = NULL;
}
EditControl::~EditControl()
{
}
void EditControl::CreateEdit(HWND hwnd, HINSTANCE hInst)
{
hEdit = CreateWindow(L"Edit", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_MULTILINE, 10, 10, 100, 100, hwnd, (HMENU)Edit1, hInst, NULL);
OldEditProc = (WNDPROC)SetWindowLong(hEdit, GWL_WNDPROC, (LONG)EditProc);
}
LRESULT CALLBACK EditControl::EditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch (uMsg)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
SelectObject(hdc, CreatePen(PS_SOLID, 1, RGB(255, 0, 0)));
RoundRect(hdc, rect.left, rect.top, rect.right, rect.bottom, 10, 10);
EndPaint(hwnd, &ps);
break;
}
return CallWindowProc(OldEditProc, hwnd, uMsg, wParam, lParam);
}
EditControl::EditProc是静态成员函数,在静态成员函数中无法使用非静态成员变量OldEditProc,除非把OldEditProc改成静态成员变量。