Posted to tcl by kostix at Tue Oct 23 22:16:42 GMT 2007view raw

  1. static int
  2. CreateMonitorWindow (
  3. Tcl_Interp *interp,
  4. Winpm_InterpData *statePtr)
  5. {
  6. CONST TCHAR name[] = _T("TkWinPMMonitorWindow");
  7. CONST TCHAR titlePfx[] = _T("TkWinPMMonitorWindow");
  8.  
  9. HINSTANCE hinst;
  10. WNDCLASSEX wc;
  11. ATOM rc;
  12. TCHAR title[256];
  13. HWND hwnd;
  14.  
  15. hinst = Tk_GetHINSTANCE();
  16.  
  17. if (!globalState.classRegistered) {
  18. memset(&wc, 0, sizeof(wc));
  19.  
  20. wc.cbSize = sizeof(WNDCLASSEX);
  21. wc.style = CS_HREDRAW | CS_VREDRAW;
  22. wc.lpfnWndProc = (WNDPROC) WndProc;
  23. wc.cbClsExtra = 0;
  24. wc.cbWndExtra = 0;
  25. wc.hInstance = hinst;
  26. wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  27. wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
  28. wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  29. wc.hbrBackground = (HBRUSH) COLOR_WINDOW;
  30. wc.lpszMenuName = name;
  31. wc.lpszClassName = name;
  32.  
  33. rc = RegisterClassEx(&wc);
  34. if (rc == 0) {
  35. Tcl_ResetResult(interp);
  36. AppendSystemError(interp, GetLastError());
  37. return TCL_ERROR;
  38. }
  39.  
  40. globalState.classRegistered = 1;
  41. }
  42.  
  43. _tcscpy(title, titlePfx);
  44. if (globalState.instances >= 1) {
  45. _stprintf(title + _tcslen(title),
  46. _T(" #%d"), globalState.instances);
  47. }
  48.  
  49. hwnd = CreateWindow(name, title, WS_OVERLAPPEDWINDOW,
  50. CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  51. NULL, NULL, hinst, NULL);
  52. if (hwnd == NULL) {
  53. Tcl_ResetResult(interp);
  54. AppendSystemError(interp, GetLastError());
  55. return TCL_ERROR;
  56. }
  57.  
  58. SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG)statePtr);
  59.  
  60. ShowWindow(hwnd, SW_HIDE);
  61. UpdateWindow(hwnd);
  62.  
  63. statePtr->hwndMonitor = hwnd;
  64.  
  65. return TCL_OK;
  66. }
  67.