• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            coreBugZJ

            此 blog 已棄。

            Windows Quiz 2

            時間倉促,草草完成1234,沒有完成5,因為設計方案不好。


              1 /*---------------------------------------------
              2 OWNDRAW.C -- Owner-Draw Button Demo Program
              3 (c) Charles Petzold, 1998
              4 ---------------------------------------------*/
              5 /*
              6 修改為:QuizZJ.cpp
              7 修改者:趙杰
              8 */
              9 
             10 #include <windows.h>
             11 
             12 #define ID_SMALLER      1
             13 #define ID_LARGER       2
             14 
             15 #define BTN_WIDTH        (8 * cxChar)
             16 #define BTN_HEIGHT       (4 * cyChar)
             17 
             18 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
             19 
             20 HINSTANCE hInst ;
             21 
             22 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
             23         PSTR szCmdLine, int iCmdShow)
             24 {
             25         static TCHAR szAppName[] = TEXT ("QuizZJ") ;
             26         MSG          msg ;
             27         HWND         hwnd ;
             28         WNDCLASS     wndclass ;
             29 
             30         hInst = hInstance ;
             31 
             32         wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
             33         wndclass.lpfnWndProc   = WndProc ;
             34         wndclass.cbClsExtra    = 0 ;
             35         wndclass.cbWndExtra    = 0 ;
             36         wndclass.hInstance     = hInstance ;
             37         wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
             38         wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
             39         wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
             40         wndclass.lpszMenuName  = NULL ;
             41         wndclass.lpszClassName = szAppName ;
             42 
             43         if (!RegisterClass (&wndclass))
             44         {
             45                 MessageBox (NULL, TEXT ("This program requires Windows NT!"),
             46                         szAppName, MB_ICONERROR) ;
             47                 return 0 ;
             48         }
             49 
             50         hwnd = CreateWindow (szAppName, TEXT ("Quiz 2"),
             51                 WS_OVERLAPPEDWINDOW,
             52                 CW_USEDEFAULT, CW_USEDEFAULT,
             53                 CW_USEDEFAULT, CW_USEDEFAULT,
             54                 NULL, NULL, hInstance, NULL) ;
             55 
             56         ShowWindow (hwnd, iCmdShow) ;
             57         UpdateWindow (hwnd) ; 
             58 
             59         while (GetMessage (&msg, NULL, 00))
             60         {
             61                 TranslateMessage (&msg) ;
             62                 DispatchMessage (&msg) ;
             63         }
             64         return msg.wParam ;
             65 }
             66 
             67 void Triangle (HDC hdc, POINT pt[])
             68 {
             69         SelectObject (hdc, GetStockObject (BLACK_BRUSH)) ;
             70         Polygon (hdc, pt, 3) ;
             71         SelectObject (hdc, GetStockObject (WHITE_BRUSH)) ;
             72 }
             73 
             74 WNDPROC  BtnWndProcPrev;
             75 
             76 LRESULT CALLBACK BtnWndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
             77         switch ( uMsg ) {
             78         case WM_KEYDOWN : 
             79         case WM_KEYUP : 
             80         case WM_CHAR : 
             81                 switch ( wParam ) {
             82                 case VK_F1 : 
             83                 case VK_TAB : 
             84                 case TEXT('R') : 
             85                 case TEXT('B') : 
             86                 case TEXT('G') : 
             87                         ::SendMessage( ::GetParent( hWnd ), uMsg, wParam, lParam );
             88                         return 0;
             89                 case TEXT('E') : 
             90                 case VK_RETURN : 
             91                         wParam = VK_SPACE;
             92                 }
             93                 break;
             94         }
             95         return ::CallWindowProc( BtnWndProcPrev, hWnd, uMsg, wParam, lParam );
             96 }
             97 
             98 LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
             99 {
            100         static HWND      hwndSmaller, hwndLarger ;
            101         static int       cxClient, cyClient, cxChar, cyChar ;
            102         static BOOL      bFirstFocus = TRUE;
            103         static HBRUSH    hbrBack;
            104         int              cx, cy ;
            105         LPDRAWITEMSTRUCT pdis ;
            106         POINT            pt[3] ;
            107         RECT             rc ;
            108 
            109         switch (message)
            110         {
            111         case WM_CREATE :
            112                 hbrBack = ::CreateSolidBrush( RGB(255,255,255) );
            113                 ::SetClassLong( hwnd, GCL_HBRBACKGROUND, (LONG)hbrBack );
            114 
            115                 cxChar = LOWORD (GetDialogBaseUnits ()) ;
            116                 cyChar = HIWORD (GetDialogBaseUnits ()) ;
            117 
            118                 // Create the owner-draw pushbuttons
            119 
            120                 hwndSmaller = CreateWindow (TEXT ("button"), TEXT (""),
            121                         WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,
            122                         00, BTN_WIDTH, BTN_HEIGHT,
            123                         hwnd, (HMENU) ID_SMALLER, hInst, NULL) ;
            124 
            125                 hwndLarger  = CreateWindow (TEXT ("button"), TEXT (""),
            126                         WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,
            127                         00, BTN_WIDTH, BTN_HEIGHT,
            128                         hwnd, (HMENU) ID_LARGER, hInst, NULL) ;
            129                 BtnWndProcPrev = (WNDPROC)::GetWindowLong( hwndSmaller, GWL_WNDPROC );
            130                 ::SetWindowLong( hwndSmaller, GWL_WNDPROC, (LONG)BtnWndProc );
            131                 ::SetWindowLong( hwndLarger, GWL_WNDPROC, (LONG)BtnWndProc );
            132                 return 0 ;
            133 
            134         case WM_SIZE :
            135                 cxClient = LOWORD (lParam) ;
            136                 cyClient = HIWORD (lParam) ;
            137 
            138                 // Move the buttons to the new center
            139 
            140                 MoveWindow (hwndSmaller, cxClient / 2 - 3 * BTN_WIDTH  / 2,
            141                         cyClient / 2 -     BTN_HEIGHT / 2,
            142                         BTN_WIDTH, BTN_HEIGHT, TRUE) ;
            143 
            144                 MoveWindow (hwndLarger,  cxClient / 2 +     BTN_WIDTH  / 2,
            145                         cyClient / 2 -     BTN_HEIGHT / 2,
            146                         BTN_WIDTH, BTN_HEIGHT, TRUE) ;
            147                 return 0 ;
            148 
            149         case WM_LBUTTONUP : 
            150                 hbrBack = ::CreateSolidBrush( RGB(255,255,255) );
            151                 ::SetClassLong( hwnd, GCL_HBRBACKGROUND, (LONG)hbrBack );
            152                 ::InvalidateRect( hwnd, NULL, TRUE );
            153                 return 0;
            154 
            155         case WM_SETFOCUS : 
            156                 ::SetFocus( bFirstFocus ? hwndSmaller : hwndLarger );
            157                 return 0;
            158 
            159         case WM_KEYDOWN : 
            160                 // case WM_CHAR : 
            161                 // case WM_KEYUP : 
            162                 switch ( wParam ) {
            163                 case VK_TAB : 
            164                         bFirstFocus = ! bFirstFocus;
            165                         ::SetFocus( bFirstFocus ? hwndSmaller : hwndLarger );
            166                         return 0;
            167                 case VK_F1 : 
            168                         MessageBox( hwnd, TEXT("作者:趙杰\n學號:10092130243"), TEXT("作者信息"), MB_OK );
            169                         return 0;
            170                 case TEXT('R') : 
            171                         if ( (::GetKeyState(VK_RCONTROL)<0)||(::GetKeyState(VK_LCONTROL)<0) ) {
            172                                 hbrBack = ::CreateSolidBrush( RGB(255,0,0) );
            173                                 ::SetClassLong( hwnd, GCL_HBRBACKGROUND, (LONG)hbrBack );
            174                                 ::InvalidateRect( hwnd, NULL, TRUE );
            175                         }
            176                         return 0;
            177                 case TEXT('G') : 
            178                         if ( (::GetKeyState(VK_RCONTROL)<0)||(::GetKeyState(VK_LCONTROL)<0) ) {
            179                                 hbrBack = ::CreateSolidBrush( RGB(0,255,0) );
            180                                 ::SetClassLong( hwnd, GCL_HBRBACKGROUND, (LONG)hbrBack );
            181                                 ::InvalidateRect( hwnd, NULL, TRUE );
            182                         }
            183                         return 0;
            184                 case TEXT('B') : 
            185                         if ( (::GetKeyState(VK_RCONTROL)<0)||(::GetKeyState(VK_LCONTROL)<0) ) {
            186                                 hbrBack = ::CreateSolidBrush( RGB(0,0,255) );
            187                                 ::SetClassLong( hwnd, GCL_HBRBACKGROUND, (LONG)hbrBack );
            188                                 ::InvalidateRect( hwnd, NULL, TRUE );
            189                         }
            190                         return 0;
            191                 }
            192                 return 0;
            193 
            194         case WM_COMMAND :
            195                 GetWindowRect (hwnd, &rc) ;
            196 
            197                 // Make the window 10% smaller or larger
            198 
            199                 switch (wParam)
            200                 {
            201                 case ID_SMALLER :
            202                         rc.left   += cxClient / 20 ;
            203                         rc.right  -= cxClient / 20 ;
            204                         rc.top    += cyClient / 20 ;
            205                         rc.bottom -= cyClient / 20 ;
            206                         break ;
            207 
            208                 case ID_LARGER :
            209                         rc.left   -= cxClient / 20 ;
            210                         rc.right  += cxClient / 20 ;
            211                         rc.top    -= cyClient / 20 ;
            212                         rc.bottom += cyClient / 20 ;
            213                         break ;
            214                 }
            215 
            216                 MoveWindow (hwnd, rc.left, rc.top, rc.right  - rc.left,
            217                         rc.bottom - rc.top, TRUE) ;
            218                 return 0 ;
            219 
            220         case WM_DRAWITEM :
            221                 pdis = (LPDRAWITEMSTRUCT) lParam ;
            222 
            223                 // Fill area with white and frame it black
            224 
            225                 FillRect (pdis->hDC, &pdis->rcItem,
            226                         (HBRUSH) GetStockObject (WHITE_BRUSH)) ;
            227 
            228                 FrameRect (pdis->hDC, &pdis->rcItem,
            229                         (HBRUSH) GetStockObject (BLACK_BRUSH)) ;
            230 
            231                 // Draw inward and outward black triangles
            232 
            233                 cx = pdis->rcItem.right  - pdis->rcItem.left ;
            234                 cy = pdis->rcItem.bottom - pdis->rcItem.top  ;
            235 
            236                 switch (pdis->CtlID)
            237                 {
            238                 case ID_SMALLER :
            239                         pt[0].x = 3 * cx / 8 ;  pt[0].y = 1 * cy / 8 ;
            240                         pt[1].x = 5 * cx / 8 ;  pt[1].y = 1 * cy / 8 ;
            241                         pt[2].x = 4 * cx / 8 ;  pt[2].y = 3 * cy / 8 ;
            242 
            243                         Triangle (pdis->hDC, pt) ;
            244 
            245                         pt[0].x = 7 * cx / 8 ;  pt[0].y = 3 * cy / 8 ;
            246                         pt[1].x = 7 * cx / 8 ;  pt[1].y = 5 * cy / 8 ;
            247                         pt[2].x = 5 * cx / 8 ;  pt[2].y = 4 * cy / 8 ;
            248 
            249                         Triangle (pdis->hDC, pt) ;
            250 
            251                         pt[0].x = 5 * cx / 8 ;  pt[0].y = 7 * cy / 8 ;
            252                         pt[1].x = 3 * cx / 8 ;  pt[1].y = 7 * cy / 8 ;
            253                         pt[2].x = 4 * cx / 8 ;  pt[2].y = 5 * cy / 8 ;
            254 
            255                         Triangle (pdis->hDC, pt) ;
            256 
            257                         pt[0].x = 1 * cx / 8 ;  pt[0].y = 5 * cy / 8 ;
            258                         pt[1].x = 1 * cx / 8 ;  pt[1].y = 3 * cy / 8 ;
            259                         pt[2].x = 3 * cx / 8 ;  pt[2].y = 4 * cy / 8 ;
            260 
            261                         Triangle (pdis->hDC, pt) ;
            262                         break ;
            263 
            264                 case ID_LARGER :
            265                         pt[0].x = 5 * cx / 8 ;  pt[0].y = 3 * cy / 8 ;
            266                         pt[1].x = 3 * cx / 8 ;  pt[1].y = 3 * cy / 8 ;
            267                         pt[2].x = 4 * cx / 8 ;  pt[2].y = 1 * cy / 8 ;
            268 
            269                         Triangle (pdis->hDC, pt) ;
            270 
            271                         pt[0].x = 5 * cx / 8 ;  pt[0].y = 5 * cy / 8 ;
            272                         pt[1].x = 5 * cx / 8 ;  pt[1].y = 3 * cy / 8 ;
            273                         pt[2].x = 7 * cx / 8 ;  pt[2].y = 4 * cy / 8 ;
            274 
            275                         Triangle (pdis->hDC, pt) ;
            276 
            277                         pt[0].x = 3 * cx / 8 ;  pt[0].y = 5 * cy / 8 ;
            278                         pt[1].x = 5 * cx / 8 ;  pt[1].y = 5 * cy / 8 ;
            279                         pt[2].x = 4 * cx / 8 ;  pt[2].y = 7 * cy / 8 ;
            280 
            281                         Triangle (pdis->hDC, pt) ;
            282 
            283                         pt[0].x = 3 * cx / 8 ;  pt[0].y = 3 * cy / 8 ;
            284                         pt[1].x = 3 * cx / 8 ;  pt[1].y = 5 * cy / 8 ;
            285                         pt[2].x = 1 * cx / 8 ;  pt[2].y = 4 * cy / 8 ;
            286 
            287                         Triangle (pdis->hDC, pt) ;
            288                         break ;
            289                 }
            290 
            291                 // Invert the rectangle if the button is selected
            292 
            293                 if (pdis->itemState & ODS_SELECTED)
            294                         InvertRect (pdis->hDC, &pdis->rcItem) ;
            295 
            296                 // Draw a focus rectangle if the button has the focus
            297 
            298                 if (pdis->itemState & ODS_FOCUS)
            299                 {
            300                         pdis->rcItem.left   += cx / 16 ;
            301                         pdis->rcItem.top    += cy / 16 ;
            302                         pdis->rcItem.right  -= cx / 16 ;
            303                         pdis->rcItem.bottom -= cy / 16 ;
            304 
            305                         DrawFocusRect (pdis->hDC, &pdis->rcItem) ;
            306                 }
            307                 return 0 ;
            308 
            309         case WM_DESTROY :
            310                 PostQuitMessage (0) ;
            311                 return 0 ;
            312         }
            313         return DefWindowProc (hwnd, message, wParam, lParam) ;
            314 }
            315 

            posted on 2011-05-31 16:25 coreBugZJ 閱讀(338) 評論(0)  編輯 收藏 引用 所屬分類: 課內作業

            亚洲综合熟女久久久30p| 波多野结衣中文字幕久久| 91麻豆精品国产91久久久久久 | 久久精品九九亚洲精品| 久久婷婷是五月综合色狠狠| 女人高潮久久久叫人喷水| 久久午夜免费视频| 无码人妻久久一区二区三区免费| 精品国产乱码久久久久久呢| 久久亚洲精品成人无码网站| 亚洲中文久久精品无码ww16| 色综合久久久久无码专区| 久久这里只有精品18| 久久天天躁狠狠躁夜夜avapp| 欧美一区二区三区久久综合| 久久精品国产亚洲AV无码娇色| 国产∨亚洲V天堂无码久久久| 欧美亚洲国产精品久久蜜芽| 久久五月精品中文字幕| 久久精品人妻中文系列| 国产精品久久国产精品99盘 | 亚洲综合伊人久久综合| 久久最近最新中文字幕大全| 人妻无码精品久久亚瑟影视| 色偷偷偷久久伊人大杳蕉| 国产欧美久久久精品| 99精品国产免费久久久久久下载| 久久精品国产2020| 88久久精品无码一区二区毛片 | 久久精品这里只有精99品| 亚洲人成无码网站久久99热国产| 青青草原精品99久久精品66| 色综合久久最新中文字幕| 99精品国产免费久久久久久下载| 久久国产乱子伦免费精品| 久久久久国产精品麻豆AR影院| 综合人妻久久一区二区精品| 91麻精品国产91久久久久 | 久久精品亚洲中文字幕无码麻豆| 久久国产福利免费| 久久99热只有频精品8|