• <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 已棄。

            Hello 顯示進(jìn)程——Windows編程上機(jī)作業(yè)之一

            作業(yè)要求在窗口中分兩列顯示進(jìn)程,我額外增加了 定時更新進(jìn)程列表,垂直滾動條,鼠標(biāo)滾輪。。。


            代碼:

            Hello.h
             1//***************************************************************************************
             2//***************************************************************************************
             3
             4// Prototype for Window Function
             5LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);
             6
             7// Prototypes of functions called by WinMain 
             8BOOL InitApplication(HINSTANCE);
             9BOOL InitInstance(HINSTANCE,int);
            10
            11//***************************************************************************************
            12//***************************************************************************************
            13


            Hello.cpp
              1#include <windows.h>
              2#include "hello.h"    // 自定義頭文件
              3#include <tlhelp32.h>
              4
              5//***************************************************************************************
              6
              7int WINAPI WinMain(HINSTANCE hInstance,                  // 入口函數(shù)
              8        HINSTANCE,
              9        LPSTR           lpCmdLine,
             10        int                   nCmdShow )
             11{
             12        if (!InitApplication(hInstance))       // 應(yīng)用初始化
             13                return FALSE;
             14
             15        if (!InitInstance(hInstance,nCmdShow)) // 實例初始化
             16                return FALSE;
             17
             18        MSG msg;
             19        while (GetMessage(&msg, NULL, 00))   // 消息循環(huán)
             20        {
             21                TranslateMessage(&msg);
             22                DispatchMessage(&msg);
             23        }

             24
             25        return (int)msg.wParam;
             26}

             27
             28//***************************************************************************************
             29
             30BOOL InitApplication(HINSTANCE hInstance)   // 應(yīng)用初始化
             31{
             32        WNDCLASS  wc;  // Data structure of the window class
             33
             34        wc.style            = CS_HREDRAW | CS_VREDRAW;
             35        wc.lpfnWndProc      = (WNDPROC)MainWndProc;  // Name of the Window Function 
             36        wc.cbClsExtra       = 0;
             37        wc.cbWndExtra       = 0;
             38        wc.hInstance        = hInstance;
             39        wc.hIcon            = LoadIcon (NULL, IDI_APPLICATION);
             40        wc.hCursor          = LoadCursor(NULL, IDC_ARROW);
             41        wc.hbrBackground    = (HBRUSH)GetStockObject(WHITE_BRUSH);
             42        wc.lpszMenuName     = NULL;
             43        wc.lpszClassName    = TEXT("My1stWClass");  // Name of the window class
             44
             45        return RegisterClass(&wc);
             46}

             47
             48//***************************************************************************************
             49
             50BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)  // 實例初始化
             51{
             52        HWND hWnd = CreateWindow(TEXT("My1stWClass"),     // Name of the window class
             53                TEXT("My First Window"),  // Title of the window
             54                WS_OVERLAPPEDWINDOW | WS_VSCROLL,
             55                CW_USEDEFAULT,
             56                CW_USEDEFAULT,
             57                CW_USEDEFAULT,
             58                CW_USEDEFAULT,
             59                NULL,
             60                NULL,
             61                hInstance,
             62                NULL           );
             63        if (!hWnd) return FALSE;
             64
             65        ShowWindow(hWnd, nCmdShow);
             66        UpdateWindow(hWnd);
             67
             68        return TRUE;
             69}

             70
             71//***************************************************************************************
             72
             73// 窗口過程函數(shù)
             74
             75#define  PROCESS_MAX       512
             76#define  PROCESS_NAME_MAX  256
             77
             78LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
             79{
             80        static int cyChar, cyClient, iVscrollPos, iVscrollMax;
             81
             82        static int iProcessNum;
             83        static TCHAR  szProcessName[ PROCESS_MAX ][ PROCESS_NAME_MAX ];
             84        static DWORD  dwProcessId[ PROCESS_MAX ];
             85
             86        switch (message) {
             87
             88        case WM_CREATE : 
             89                {
             90                        TEXTMETRIC tm;
             91                        HDC hdc;
             92
             93                        ::SetTimer( hWnd, 01000, NULL );
             94                        
             95                        hdc = ::GetDC( hWnd );
             96                        ::GetTextMetrics( hdc, &tm );
             97                        cyChar = tm.tmHeight + tm.tmExternalLeading;
             98                        ::ReleaseDC( hWnd, hdc );
             99
            100                        ::SendMessage( hWnd, WM_TIMER, 00 );
            101                }

            102                return 0;
            103
            104        case WM_SIZE : 
            105                cyClient = HIWORD( lParam );
            106                return 0;
            107
            108        case WM_TIMER : 
            109                {
            110                        PROCESSENTRY32 pe32;
            111                        HANDLE  hProcessSnap;
            112                        BOOL bMore;
            113
            114                        pe32.dwSize = sizeof(pe32);
            115                        hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
            116                        bMore = ::Process32First(hProcessSnap, &pe32);
            117                        iProcessNum = 0;
            118                        while ( bMore ) {
            119                                ::lstrcpy( szProcessName[ iProcessNum ], pe32.szExeFile );
            120                                dwProcessId[ iProcessNum++ ] = pe32.th32ProcessID;
            121                                bMore = ::Process32Next(hProcessSnap, &pe32);
            122                        }

            123                        ::CloseHandle(hProcessSnap);
            124                        iVscrollMax = ( iProcessNum + 1 ) / 2 * 3 - 1;
            125                        if ( iVscrollPos > iVscrollMax ) {
            126                               iVscrollPos = iVscrollMax;
            127                        }

            128                        ::SetScrollRange( hWnd, SB_VERT, 0, iVscrollMax, FALSE );
            129                        ::SetScrollPos( hWnd, SB_VERT, iVscrollPos, TRUE );
            130                        ::InvalidateRect( hWnd, NULL, TRUE );
            131                }

            132                return 0;
            133
            134        case WM_MOUSEWHEEL : 
            135                {
            136                        short delta = HIWORD( wParam );
            137                        if ( delta < 0 ) {
            138                                ::SendMessage( hWnd, WM_VSCROLL, SB_LINEDOWN, 0 );
            139                        }

            140                        if ( delta > 0 ) {
            141                                ::SendMessage( hWnd, WM_VSCROLL, SB_LINEUP, 0 );
            142                        }

            143                }

            144                return 0;
            145
            146        case WM_VSCROLL : 
            147                switch ( LOWORD( wParam ) ) {
            148                case SB_LINEUP : 
            149                        --iVscrollPos;
            150                        break;
            151                case SB_LINEDOWN : 
            152                        ++iVscrollPos;
            153                        break;
            154                case SB_PAGEUP : 
            155                        iVscrollPos -= cyClient / cyChar;
            156                        break;
            157                case SB_PAGEDOWN : 
            158                        iVscrollPos += cyClient / cyChar;
            159                        break;
            160                case SB_THUMBPOSITION : 
            161                        iVscrollPos = HIWORD( wParam );
            162                        break;
            163                default : 
            164                        break;
            165                }

            166                if ( iVscrollPos > iVscrollMax ) {
            167                        iVscrollPos = iVscrollMax;
            168                }

            169                if ( iVscrollPos < 0 ) {
            170                        iVscrollPos = 0;
            171                }

            172                if ( iVscrollPos != ::GetScrollPos( hWnd, SB_VERT ) ) {
            173                        ::SetScrollPos( hWnd, SB_VERT, iVscrollPos, TRUE );
            174                        ::InvalidateRect( hWnd, NULL, TRUE );
            175                }

            176                return 0;
            177
            178        case WM_PAINT: 
            179                {
            180                        PAINTSTRUCT ps;
            181                        HDC hdc;
            182                        TCHAR str[ PROCESS_NAME_MAX + 100 ];
            183                        int i, x, y, lef = 0;
            184
            185                        hdc = ::BeginPaint( hWnd, &ps );
            186
            187                        for ( i = 0; i < iProcessNum; ++i ) {
            188                                x = lef * 300;
            189                                y = ( ( (i+1+1/ 2 * 3 - 3 ) - iVscrollPos ) * cyChar;
            190                                lef ^= 1;
            191
            192                                ::wsprintf( str, TEXT(" 進(jìn)程名稱:%s "), szProcessName[ i ] );
            193                                ::TextOut( hdc, x, y, str, lstrlen(str) );
            194                                y += cyChar;
            195                                ::wsprintf( str, TEXT(" 進(jìn)程ID號:%u "), dwProcessId[ i ] );
            196                                ::TextOut( hdc, x, y, str, lstrlen(str) );
            197                        }

            198
            199                        ::EndPaint( hWnd, &ps );
            200                }

            201                return 0;
            202
            203        case WM_DESTROY: // 窗口關(guān)閉
            204                ::KillTimer( hWnd, 0 );
            205                PostQuitMessage(0);
            206                return 0;
            207
            208        default:  // 缺省消息的處理
            209                return DefWindowProc(hWnd, message, wParam, lParam);
            210        }

            211}

            212

            posted on 2011-03-22 19:02 coreBugZJ 閱讀(272) 評論(0)  編輯 收藏 引用 所屬分類: 課內(nèi)作業(yè)

            精品久久久久久久中文字幕 | 国产精品99久久久精品无码| 久久国产高清一区二区三区| 久久久久97国产精华液好用吗| 久久久精品视频免费观看| 一本久道久久综合狠狠躁AV| 久久精品无码一区二区WWW| 久久综合综合久久综合| 国产精品久久久久9999| 午夜精品久久久内射近拍高清| 精品国产乱码久久久久软件| 99久久无色码中文字幕| 国产日韩久久久精品影院首页 | 99久久婷婷免费国产综合精品| 91精品日韩人妻无码久久不卡| 欧美色综合久久久久久| 国产精品99久久精品| 久久笫一福利免费导航 | 成人亚洲欧美久久久久| 久久99热这里只有精品国产| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久亚洲精品国产精品| 久久久久99精品成人片三人毛片| 国产色综合久久无码有码| 久久99精品久久久久久9蜜桃| 久久av无码专区亚洲av桃花岛| 亚洲欧洲精品成人久久曰影片| 丰满少妇人妻久久久久久| 亚洲AV日韩精品久久久久久| 久久九九久精品国产免费直播| 青青草原综合久久| 丰满少妇人妻久久久久久| 久久精品国产色蜜蜜麻豆| 一本色道久久88综合日韩精品| 品成人欧美大片久久国产欧美| 久久国产乱子精品免费女| 91精品国产色综合久久| 久久91亚洲人成电影网站| 91久久精一区二区三区大全| 久久久久人妻一区精品性色av| 人妻丰满AV无码久久不卡|