/* * Interface code to button widgets * * Copyright David W. Metcalfe, 1993 * */ static char Copyright[] = "Copyright David W. Metcalfe, 1993"; #include #include #include "WinButton.h" #include "windows.h" #include "heap.h" #include "win.h" static void BUTTON_WinButtonCallback(Widget w, XtPointer client_data, XtPointer call_data); void BUTTON_CreateButton(LPSTR className, LPSTR buttonLabel, HWND hwnd) { WND *wndPtr = WIN_FindWndPtr(hwnd); WND *parentPtr = WIN_FindWndPtr(wndPtr->hwndParent); DWORD style; char widgetName[15]; #ifdef DEBUG_BUTTON printf("button: label = %s, x = %d, y = %d\n", buttonLabel, wndPtr->rectClient.left, wndPtr->rectClient.top); printf(" width = %d, height = %d\n", wndPtr->rectClient.right - wndPtr->rectClient.left, wndPtr->rectClient.bottom - wndPtr->rectClient.top); #endif if (!wndPtr) return; style = wndPtr->dwStyle & 0x0000000F; switch (style) { case BS_PUSHBUTTON: case BS_DEFPUSHBUTTON: sprintf(widgetName, "%s%d", className, wndPtr->wIDmenu); wndPtr->winWidget = XtVaCreateManagedWidget(widgetName, winButtonWidgetClass, parentPtr->winWidget, XtNlabel, buttonLabel, XtNx, wndPtr->rectClient.left, XtNy, wndPtr->rectClient.top, XtNwidth, wndPtr->rectClient.right - wndPtr->rectClient.left, XtNheight, wndPtr->rectClient.bottom - wndPtr->rectClient.top, XtVaTypedArg, XtNbackground, XtRString, "grey70", strlen("grey75")+1, NULL); XtAddCallback(wndPtr->winWidget, XtNcallback, BUTTON_WinButtonCallback, (XtPointer) hwnd); break; default: printf("CreateButton: Unsupported button style %lX\n", wndPtr->dwStyle); } GlobalUnlock(hwnd); GlobalUnlock(wndPtr->hwndParent); } static void BUTTON_WinButtonCallback(Widget w, XtPointer client_data, XtPointer call_data) { HWND hwnd = (HWND) client_data; WND *wndPtr; wndPtr = WIN_FindWndPtr(hwnd); CallWindowProc(wndPtr->lpfnWndProc, wndPtr->hwndParent, WM_COMMAND, wndPtr->wIDmenu, MAKELPARAM(hwnd, BN_CLICKED)); GlobalUnlock(hwnd); }