SetWindowSubclass 设置窗口子类回调
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SetWindowSubclass 设置窗口子类回调,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1977字,纯文字阅读大概需要3分钟。
内容图文
![SetWindowSubclass 设置窗口子类回调](/upload/InfoBanner/zyjiaocheng/923/f18ac874d0bd4d38b920df28a920035b.jpg)
今天想给一个 Static 控件添加一个鼠标相关的事件:移入,移出,按下,松开事件
一开始以为在
while (GetMessage (&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); ... }
这里捕获,发现不行。搞了半天,也没达到效果。
后来无意发现一个API:SetWindowSubclass
LRESULT CALLBACK MySubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData) { switch (uMsg) { case WM_NCDESTROY: { RemoveWindowSubclass(hWnd, &MySubclassProc, uIdSubclass); break; } case WM_MOUSELEAVE: { //printf("WM_MOUSELEAVE\n"); SendMessage(hwnd_lbl_back, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hBitmap_back); //设置图标 break; } case WM_MOUSEMOVE: { //printf("WM_MOUSEMOVE\n"); //为了捕获 WM_MOUSELEAVE TRACKMOUSEEVENT tme = {0}; tme.cbSize = sizeof(tme); tme.hwndTrack = hWnd; tme.dwFlags = TME_LEAVE; // tme.dwFlags = TME_LEAVE | TME_HOVER; // tme.dwHoverTime = 1; TrackMouseEvent(&tme); //-------------------------- if(wParam & MK_LBUTTON) //按下 { SendMessage(hwnd_lbl_back, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hBitmap_back_pressed); //设置图标 } else { SendMessage(hwnd_lbl_back, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hBitmap_back_over); //设置图标 } break; } case WM_LBUTTONDOWN: //按下 { //printf("WM_LBUTTONDOWN\n"); SendMessage(hwnd_lbl_back, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hBitmap_back_pressed); //设置图标 break; } case WM_LBUTTONUP: //松开 { //printf("WM_LBUTTONUP\n"); SendMessage(hwnd_lbl_back, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hBitmap_back_over); //设置图标 break; } } return DefSubclassProc(hWnd, uMsg, wParam, lParam); }
hwnd_lbl_back = CreateWindowEx(0, "static", "", // WS_CHILD | WS_VISIBLE | SS_NOTIFY | SS_BITMAP, //SS_GRAYFRAME 使用背景色 | WS_DISABLED 4, // xpos 4, // ypos 28, //width 28, //height hwnd_frame, (HMENU)id_lbl_back, g_hInstance, NULL) ; SetWindowSubclass(hwnd_lbl_back, &MySubclassProc, 0, (DWORD_PTR) REF_BACK); //设置窗口子类回调
问题解决,SetWindowSubclass () 这么好用的API,我还是刚刚知道,第一次使用。
惭愧惭愧
内容总结
以上是互联网集市为您收集整理的SetWindowSubclass 设置窗口子类回调全部内容,希望文章能够帮你解决SetWindowSubclass 设置窗口子类回调所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。