MainFrame.cpp
上传用户:whjcdz88
上传日期:2011-09-07
资源大小:121k
文件大小:5k
源码类别:

图形图象

开发平台:

WINDOWS

  1. #include "View3D.h"
  2. LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
  3. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
  4.                     PSTR szCmdLine, int iCmdShow)
  5. {
  6. static TCHAR szAppName[] = TEXT ("Graphic") ;
  7. HWND hwnd ;
  8. MSG msg ;
  9. WNDCLASS wndclass ;
  10. HMENU hMenu;
  11.   wndclass.style   = CS_HREDRAW | CS_VREDRAW ;
  12.   wndclass.lpfnWndProc  = WndProc ;
  13. wndclass.cbClsExtra   = 0 ;
  14. wndclass.cbWndExtra   = 0 ;
  15. wndclass.hInstance   = hInstance ;
  16. wndclass.hIcon   = LoadIcon (NULL, IDI_APPLICATION) ;
  17.    wndclass.hCursor   = LoadCursor (NULL, IDC_ARROW) ;
  18.   wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
  19.    wndclass.lpszMenuName = NULL ;
  20. wndclass.lpszClassName = szAppName ;
  21. if (!RegisterClass (&wndclass))
  22.     {
  23. MessageBox ( NULL, TEXT ("This program requires Windows NT!"), 
  24.            szAppName, MB_ICONERROR) ;
  25. return 0 ;
  26.     }
  27. hwnd = CreateWindow( szAppName, // window class name
  28. szAppName, // window caption
  29. WS_OVERLAPPEDWINDOW, // window style
  30. CW_USEDEFAULT, // initial x position
  31. CW_USEDEFAULT, // initial y position
  32. CW_USEDEFAULT, // initial x size
  33. CW_USEDEFAULT, // initial y size
  34. NULL, // parent window handle
  35.     NULL,         // window menu handle
  36.     hInstance,     // program instance handle
  37.     NULL) ;      // creation parameters
  38. hMenu = LoadMenu( hInstance , MAKEINTRESOURCE(IDR_MENU1) );
  39. SetMenu( hwnd , hMenu );
  40.      
  41. ShowWindow (hwnd, iCmdShow) ;
  42. UpdateWindow (hwnd) ;
  43.      
  44. while (GetMessage (&msg, NULL, 0, 0))
  45.      {
  46. TranslateMessage (&msg) ;
  47.   DispatchMessage (&msg) ;
  48.      }
  49. return msg.wParam ;
  50. }
  51. LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  52. {  
  53. static Vector N , V ;
  54. static Point PVanishing , p1 , p2 ;
  55. static int pnum = 0 , snum ,lnum , Mode = 0 , cx ,cy ;
  56. HDC hdc ;
  57. HPEN BPen , SPen ;
  58. PAINTSTRUCT lpPaint ;
  59. int i;
  60. switch (message)
  61. {
  62. case WM_SIZE:
  63. cx = LOWORD( lParam );
  64. cy = HIWORD( lParam );
  65. Adjust( pnum , cx , cy );
  66. return 0 ;
  67. case WM_TIMER:
  68. for( i = 0 ; i < pnum ; i ++ )
  69. {
  70. p[i].vc = Rotate3D( p[i].vc );
  71. p[i].pc = Vc2Pc( PVanishing.vc , p[i].vc );
  72. }
  73. Mid.vc = Rotate3D( Mid.vc );
  74. Clear( lnum );
  75. for( i = 0 ; i < snum ; i ++ )
  76. IsVisible( s[i] );
  77. Adjust( pnum , cx ,cy );
  78. InvalidateRect( hwnd , NULL , TRUE );
  79. return 0 ;
  80. case WM_COMMAND:
  81. switch( wParam )
  82. {
  83. case ID_WORK_POINTNUMBER:
  84. pnum = 8 ; 
  85. //return 0 ;
  86. case ID_WORK_LINENUMBER:
  87. lnum = 12 ;
  88. //return 0 ;
  89. case ID_WORK_SURFACENUMBER:
  90. snum = 6 ;
  91. //return 0 ;
  92. case ID_WORK_POINTCOORDINATE:
  93. Init();
  94. //return 0 ;
  95. case ID_WORK_REFERENCEPOINT:
  96. N.x = 0 ; N.y = 0 ; N.z = 300;
  97. //return 0 ;
  98. case ID_WORK_VIEW:
  99. V.x = 0 ; V.y = 300 ; V.z = 300 ;
  100. CalWc2Vc( N , V );
  101. for( i = 0 ; i < pnum ; i ++ )
  102. p[i].vc = Wc2Vc( p[i].wc );
  103. Mid.vc = Wc2Vc( Mid.wc );
  104. //return 0 ;
  105. case ID_WORK_VANISHINGPOINT:
  106. PVanishing.wc.x = 0 ; PVanishing.wc.y = 100 ; PVanishing.wc.z = 1000;
  107. PVanishing.vc  = Wc2Vc( PVanishing.wc );
  108. for( i = 0 ; i < pnum ; i ++ )
  109. p[i].pc = Vc2Pc( PVanishing.vc  , p[i].vc );
  110. Clear( lnum );
  111. for( i = 0  ; i < snum ; i ++ )
  112. IsVisible( s[i] );
  113. //return 0 ;
  114. case ID_WORK_ROTATION:
  115. p1.wc.x = 0 ; p1.wc.y = 0 ; p1.wc.z = 100 ;
  116. p2.wc.x = 100 ; p2.wc.y = 100 ; p2.wc.z = 100 ;
  117. p1.vc = Wc2Vc( p1.wc  );
  118. p2.vc = Wc2Vc( p2.wc );
  119. CalRotation( p1.vc , p2.vc , 10 );
  120. //return 0 ;
  121. case ID_WORK_START:
  122. Mode = 1 ;
  123. Adjust( pnum , cx , cy );
  124. SetTimer( hwnd , 1 , 100 , NULL );
  125. InvalidateRect( hwnd , NULL , FALSE );
  126. //return 0 ;
  127. }
  128. return 0 ;
  129. case WM_PAINT:
  130. hdc = BeginPaint( hwnd , &lpPaint );
  131. if ( Mode == 1 )
  132. {
  133. SPen = CreatePen( PS_DOT , 1 , RGB( 0 , 0 , 0 ));
  134. BPen = (HPEN)GetStockObject (BLACK_PEN );
  135. SelectObject( hdc , SPen );
  136. for( i = 0 ; i < lnum ; i ++ )
  137. {
  138. if( L[i].flag == 0 )
  139. {
  140. MoveToEx( hdc , int(p[ L[i].p[0] ].pc.x + 0.5)  , (int)( p[ L[i].p[0] ].pc.y + 0.5 ) , NULL );
  141. LineTo( hdc , (int) ( p[ L[i].p[1] ].pc.x + 0.5 ) ,(int)( p[ L[i].p[1] ].pc.y + 0.5) );
  142. }
  143. }
  144. SelectObject( hdc , BPen );
  145. for( i = 0 ; i < lnum ; i ++ )
  146. {
  147. if( L[i].flag == 1 )
  148. {
  149. MoveToEx( hdc , int(p[ L[i].p[0] ].pc.x + 0.5)  , (int)( p[ L[i].p[0] ].pc.y + 0.5 ) , NULL );
  150. LineTo( hdc , (int) ( p[ L[i].p[1] ].pc.x + 0.5 ) ,(int)( p[ L[i].p[1] ].pc.y + 0.5) );
  151. }
  152. }
  153. DeleteObject( SPen );
  154. }
  155. EndPaint( hwnd , &lpPaint );
  156. return 0 ;
  157. case  WM_DESTROY:
  158. KillTimer( hwnd , 1 );
  159. PostQuitMessage (0) ;
  160. return 0 ;
  161. }
  162. return DefWindowProc (hwnd, message, wParam, lParam) ;
  163. }