|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 AnisHan 于 2022-4-20 20:54 编辑
如题,我使用了WIN32API中的子窗口 “scrollbar”
但是我想用窗口子类实现自己处理一部分消息,于是我用GetWindowLongPtr更换了窗口子类的WndProc,如果CreateWindow里面x,y with height都填0 就没事 子窗口也不会显示
一旦我调用MoveWindow让子窗口出现就会出异常,当CreateWindow 的x,y with height直接就设置好值也会出异常
代码如下 hin是全局变量表示程序实例句柄,ScrollPR是ScrollBar的原窗口过程
十分感谢
- LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- static RECT rect;
- static int cxChar, cyChar, cyClient, cxClient;
- HDC hdc;
- PAINTSTRUCT ps;
- int i;
- LPDRAWITEMSTRUCT pdis;
- TCHAR szBuffer[16];
- static HWND ScrollBar;
- static int pos;
- switch (message)
- {
- case WM_CREATE:
- cxChar = LOWORD(GetDialogBaseUnits());
- cyChar = HIWORD(GetDialogBaseUnits());
- ScrollBar = CreateWindow(
- TEXT("scrollbar"),
- NULL,
- WS_CHILD | WS_VISIBLE | SBS_VERT | WS_TABSTOP,
- 0, 0, 0, 0,
- hwnd,
- (HMENU)1,
- hin,
- NULL
- );
-
- SetScrollRange(ScrollBar, SB_CTL, 0, 100, FALSE);
- SetScrollPos(ScrollBar, SB_CTL, 0, FALSE);
- ScrollPR = GetWindowLongPtr(ScrollBar, GWLP_WNDPROC);
- SetWindowLongPtr(ScrollBar, GWLP_WNDPROC, (LONG)ScrollProc);
-
- return 0;
- return 0;
- case WM_SIZE:
- rect.left = 24 * cxChar;
- rect.top = 2 * cyChar;
- rect.right = LOWORD(lParam);
- rect.bottom = HIWORD(lParam);
- MoveWindow(ScrollBar, 10, 10, 20, 200, FALSE);
- return 0;
-
- case WM_PAINT:
- hdc = BeginPaint(hwnd, &ps);
-
- EndPaint(hwnd, &ps);
- return 0;
- case WM_DESTROY:
- PostQuitMessage(0);
- return 0;
- }
- return DefWindowProc(hwnd, message, wParam, lParam);
- }
- LRESULT CALLBACK ScrollProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
- MessageBeep(0);
- TCHAR szBuffer[16];
- wsprintf(szBuffer, TEXT("%d"), GetLastError());
- MessageBox(hwnd, szBuffer, NULL, MB_OK);
- switch (message)
- {
- case WM_KEYDOWN:
- MessageBeep(0);
- break;
- default:
- break;
- }
- return CallWindowProc(ScrollPR, hwnd, message, wParam, lParam);
- }
复制代码
想设置悬赏,大佬们怎么弄 |
|