void kdispwin_create(HINSTANCE hInstance) { TCHAR szCaption[128]; HWND hwnd; UINT8 mode; CMNPALFN palfn; if (kdispwin.hwnd != NULL) { return; } ZeroMemory(&kdispwin, sizeof(kdispwin)); loadstringresource(LOWORD(IDS_CAPTION_KEYDISP), szCaption, NELEMENTS(szCaption)); hwnd = CreateWindow(kdispclass, szCaption, WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX, kdispcfg.posx, kdispcfg.posy, KEYDISP_WIDTH, KEYDISP_HEIGHT, NULL, NULL, hInstance, NULL); kdispwin.hwnd = hwnd; if (hwnd == NULL) { goto kdcre_err1; } switch(kdispcfg.mode) { case KDISPCFG_FM: default: mode = KEYDISP_MODEFM; break; case KDISPCFG_MIDI: mode = KEYDISP_MODEMIDI; break; } kdsetdispmode(mode); ShowWindow(hwnd, SW_SHOWNOACTIVATE); UpdateWindow(hwnd); kdispwin.dd2hdl = dd2_create(hwnd, KEYDISP_WIDTH, KEYDISP_HEIGHT); if (kdispwin.dd2hdl == NULL) { goto kdcre_err2; } palfn.get8 = kdgetpal8; palfn.get32 = kdgetpal32; palfn.cnv16 = kdcnvpal16; palfn.userdata = (long)kdispwin.dd2hdl; keydisp_setpal(&palfn); kdispwin_draw(0); SetForegroundWindow(g_hWndMain); return; kdcre_err2: DestroyWindow(hwnd); kdcre_err1: sysmenu_setkeydisp(0); sysmng_update(SYS_UPDATEOSCFG); }
static LRESULT CALLBACK kdproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { switch(msg) { case WM_CREATE: np2class_wmcreate(hWnd); np2class_windowtype(hWnd, (kdispcfg.type & 1) << 1); break; case WM_COMMAND: switch(LOWORD(wp)) { case IDM_KDISPFM: kdispcfg.mode = KDISPCFG_FM; sysmng_update(SYS_UPDATEOSCFG); kdsetdispmode(KEYDISP_MODEFM); break; case IDM_KDISPMIDI: kdispcfg.mode = KDISPCFG_MIDI; sysmng_update(SYS_UPDATEOSCFG); kdsetdispmode(KEYDISP_MODEMIDI); break; case IDM_KDCLOSE: return(SendMessage(hWnd, WM_CLOSE, 0, 0)); } break; case WM_PAINT: kdpaintmsg(hWnd); break; #if 0 case WM_ACTIVATE: if (LOWORD(wp) != WA_INACTIVE) { keydisps_reload(); kddrawkeys(hWnd, TRUE); } break; #endif case WM_LBUTTONDOWN: if (kdispcfg.type & 1) { return(SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0L)); } break; case WM_RBUTTONDOWN: kdopenpopup(hWnd, lp); break; case WM_LBUTTONDBLCLK: kdispcfg.type ^= 1; wintypechange(hWnd, (kdispcfg.type & 1) << 1); sysmng_update(SYS_UPDATEOSCFG); break; case WM_KEYDOWN: case WM_KEYUP: SendMessage(hWndMain, msg, wp, lp); break; case WM_ENTERMENULOOP: soundmng_disable(SNDPROC_SUBWIND); break; case WM_EXITMENULOOP: soundmng_enable(SNDPROC_SUBWIND); break; case WM_ENTERSIZEMOVE: soundmng_disable(SNDPROC_SUBWIND); winlocex_destroy(kdispwin.wlex); kdispwin.wlex = np2_winlocexallwin(hWnd); break; case WM_MOVING: winlocex_moving(kdispwin.wlex, (RECT *)lp); break; case WM_EXITSIZEMOVE: winlocex_destroy(kdispwin.wlex); kdispwin.wlex = NULL; soundmng_enable(SNDPROC_SUBWIND); break; case WM_MOVE: if (!(GetWindowLong(hWnd, GWL_STYLE) & (WS_MAXIMIZE | WS_MINIMIZE))) { RECT rc; GetWindowRect(hWnd, &rc); kdispcfg.posx = rc.left; kdispcfg.posy = rc.top; sysmng_update(SYS_UPDATEOSCFG); } break; case WM_CLOSE: sysmenu_setkeydisp(0); sysmng_update(SYS_UPDATEOSCFG); DestroyWindow(hWnd); break; case WM_DESTROY: np2class_wmdestroy(hWnd); dd2_release(kdispwin.dd2hdl); kdispwin.hwnd = NULL; kdsetdispmode(KEYDISP_MODENONE); break; default: return(DefWindowProc(hWnd, msg, wp, lp)); } return(0L); }