亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sessioninfo.cpp

?? VC游戲編程基礎
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
                           ( sizeof( WCHAR ) * (dwNameLen + 1) ); 

    // Allocate space
    SI_MSG_GROUPINFO* pMsg = (SI_MSG_GROUPINFO*) new BYTE[ dpBufDesc.dwBufferSize ];
    if( NULL == pMsg )
    {
        Unlock();
        return E_OUTOFMEMORY;
    }

    // Set the data pointer
    dpBufDesc.pBufferData = (BYTE*) pMsg;

    // Store values
    pMsg->dwMsgID       = SI_MSGID_GROUPINFO;
    pMsg->dpnID         = idGroup;
    pMsg->dwNameLength  = dwNameLen;

    // Pack the strings
    LPWSTR pStr = (LPWSTR) (pMsg+1);
    DXUtil_ConvertGenericStringToWideCch( pStr, pGroup->strName, dwNameLen+1 );
    
    // Release the lock
    Unlock();

    // Send the information
    DPNHANDLE dpAsync;
            
    switch( m_eType )
    {
        case PEER:
            hr = m_pPeer->SendTo( idTarget, &dpBufDesc, 1, 0, SI_ASYNC_CONTEXT, &dpAsync, DPNSEND_NOCOMPLETE | DPNSEND_NOLOOPBACK );
            break;

        case SERVER:
            hr = m_pServer->SendTo( idTarget, &dpBufDesc, 1, 0, SI_ASYNC_CONTEXT, &dpAsync, DPNSEND_NOCOMPLETE | DPNSEND_NOLOOPBACK );
            break;

        default:
            hr = E_FAIL;
            break;
    }

    // Release allocated memory and return
    SAFE_DELETE_ARRAY( pMsg );
    return hr;
}




//-----------------------------------------------------------------------------
// Name: SynchronizeWithPlayer()
// Desc: Send all stored group and player information to the player with the 
//       given ID
//-----------------------------------------------------------------------------
HRESULT CSessionInfo::SynchronizeWithPlayer( DPNID id )
{
    HRESULT hr = S_OK;

    Lock();

    // Send all player and group information
    for( UINT i=0; i < m_pPlayers->Count(); i++ )
    {
        CSIPlayer* pPlayer = (CSIPlayer*) m_pPlayers->GetPtr( i );

        // Attempt to send 
        hr = SendPlayerInfoToPlayer( pPlayer->id, id );
        if( FAILED(hr) )
            break;
    }

    for( i=0; i < m_pGroups->Count(); i++ )
    {
        CSIGroup* pGroup = (CSIGroup*) m_pGroups->GetPtr( i );

        // Attempt to send 
        hr = SendGroupInfoToPlayer( pGroup->id, id );
        if( FAILED(hr) )
            break;
    }

    Unlock();

    return hr;
}




//-----------------------------------------------------------------------------
// Name: ShowDialog()
// Desc: Show the dialog UI for all stored player, group, and message data.
//-----------------------------------------------------------------------------
HRESULT CSessionInfo::ShowDialog( HWND hParent )
{
    // If a dialog already exists, bring it to the front
    if( m_hDlg )
    {
        if( FALSE == BringWindowToTop( m_hDlg ) )
            return E_FAIL;
    }
    else
    {
        // If there is an old thread handle, release it now
        SafeDestroyThread( &m_hDlgThread );

        // Launch a new dialog thread
        DWORD dwThreadID;

        m_hDlgParent = hParent;
        m_hDlgThread = chBEGINTHREADEX( NULL, 0, StaticDialogThread, (void*) this, 0, &dwThreadID );
    }

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: StaticDialogThread()
// Desc: Message pump thread for modeless dialogs
//-----------------------------------------------------------------------------
DWORD WINAPI CSessionInfo::StaticDialogThread( void* pvRef )
{
    CSessionInfo* pThis = (CSessionInfo*) pvRef;

    pThis->m_hDlgPlayers = CreateDialog( GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_SI_PLAYERS), pThis->m_hDlgParent, StaticDlgProcPlayers );
    pThis->m_hDlgMessages = CreateDialog( GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_SI_MESSAGES), pThis->m_hDlgParent, StaticDlgProcMessages );
    pThis->m_hDlg = CreateDialog( GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_SI_MAIN), pThis->m_hDlgParent, StaticDlgProcMain );   
    
    ShowWindow( pThis->m_hDlg, SW_SHOW );

    MSG msg;
    while( GetMessage( &msg, NULL, 0, 0) )
    {  
        // Forward the message to the dialog
        if( IsDialogMessage( pThis->m_hDlg, &msg ) )
            continue;

        if( IsDialogMessage( pThis->m_hDlgPlayers, &msg ) )
            continue;

        if( IsDialogMessage( pThis->m_hDlgMessages, &msg ) )
            continue;
    }

    // Release the window resources
    DestroyWindow( pThis->m_hDlgMessages ); 
    pThis->m_hDlgMessages = NULL;

    DestroyWindow( pThis->m_hDlgPlayers );  
    pThis->m_hDlgPlayers = NULL;

    DestroyWindow( pThis->m_hDlg );         
    pThis->m_hDlg = NULL;

    return 0;
}




//-----------------------------------------------------------------------------
// Name: StaticDlgProcMain()
// Desc: Static dialog procedure sorts incoming messages according to the
//       window handle and assigns them to the member dialog procedure for the
//       correct instance
//-----------------------------------------------------------------------------
INT_PTR CALLBACK CSessionInfo::StaticDlgProcMain( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
    if( g_pSI )
        return g_pSI->DlgProcMain( hDlg, uMsg, wParam, lParam );

    return FALSE;
}




//-----------------------------------------------------------------------------
// Name: StaticDlgProcPlayers()
// Desc: Static dialog procedure sorts incoming messages according to the
//       window handle and assigns them to the member dialog procedure for the
//       correct instance
//-----------------------------------------------------------------------------
INT_PTR CALLBACK CSessionInfo::StaticDlgProcPlayers( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
    if( g_pSI )
        return g_pSI->DlgProcPlayers( hDlg, uMsg, wParam, lParam );

    return FALSE;
}




//-----------------------------------------------------------------------------
// Name: StaticDlgProcMessages()
// Desc: Static dialog procedure sorts incoming messages according to the
//       window handle and assigns them to the member dialog procedure for the
//       correct instance
//-----------------------------------------------------------------------------
INT_PTR CALLBACK CSessionInfo::StaticDlgProcMessages( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
    if( g_pSI )
        return g_pSI->DlgProcMessages( hDlg, uMsg, wParam, lParam );

    return FALSE;
}
  



//-----------------------------------------------------------------------------
// Name: DlgProcMain()
// Desc: Dialog procedure for the UI
//-----------------------------------------------------------------------------
INT_PTR CALLBACK CSessionInfo::DlgProcMain( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
    switch( uMsg )
    {
        case WM_INITDIALOG:
        {
            SetParent( m_hDlgPlayers, GetDlgItem( hDlg, IDC_SI_TAB ) );
            SetParent( m_hDlgMessages, GetDlgItem( hDlg, IDC_SI_TAB ) );

            // Set the window title
            DPN_APPLICATION_DESC* pAppDesc;
            if( SUCCEEDED( GetDpAppDesc( &pAppDesc ) ) )
            {
                TCHAR strTitle[ 256 ];
                
                DXUtil_ConvertWideStringToGenericCch( strTitle, pAppDesc->pwszSessionName, 256-50 );
                lstrcat( strTitle, TEXT(" - Session Info") );
                SendMessage( hDlg, WM_SETTEXT, 0, (LPARAM) strTitle ); 
            }

            // Add tabs
            TCITEM tcItem = {0};
            tcItem.mask = TCIF_TEXT;

            tcItem.pszText = TEXT("Players");
            SendMessage( GetDlgItem( hDlg, IDC_SI_TAB ), TCM_INSERTITEM, 0, (LPARAM) &tcItem );
            tcItem.pszText = TEXT("Messages");
            SendMessage( GetDlgItem( hDlg, IDC_SI_TAB ), TCM_INSERTITEM, 1, (LPARAM) &tcItem );


            RECT rcWindow = {0};
            GetWindowRect( GetDlgItem( hDlg, IDC_SI_TAB ), &rcWindow );
            SendMessage( GetDlgItem( hDlg, IDC_SI_TAB ), TCM_ADJUSTRECT, FALSE, (LPARAM) &rcWindow );

            POINT ptWindow = { rcWindow.left, rcWindow.top };
            ScreenToClient( GetDlgItem( hDlg, IDC_SI_TAB ), &ptWindow );
            MoveWindow( m_hDlgPlayers, ptWindow.x, ptWindow.y, rcWindow.right - rcWindow.left, rcWindow.bottom - rcWindow.top, FALSE );
            MoveWindow( m_hDlgMessages, ptWindow.x, ptWindow.y, rcWindow.right - rcWindow.left, rcWindow.bottom - rcWindow.top, FALSE );

            ShowWindow( m_hDlgPlayers, SW_SHOW );

            SAFE_DELETE_ARRAY( pAppDesc );
            return TRUE;
        }

        case WM_COMMAND:
            switch( LOWORD(wParam) )
            {
                case IDCANCEL:
                    SendMessage( hDlg, WM_CLOSE, 0, 0 );
                    return TRUE;
            }

            break;

        case WM_NOTIFY:
        {
            NMHDR* pHdr = (NMHDR*) lParam; 
            switch( pHdr->code )
            {
                case TCN_SELCHANGE:
                    DWORD dwCurSel = SendMessage( GetDlgItem( hDlg, IDC_SI_TAB ), TCM_GETCURSEL, 0, 0 );

                    ShowWindow( m_hDlgPlayers,  ( 0 == dwCurSel ) ? SW_SHOW : SW_HIDE );
                    ShowWindow( m_hDlgMessages, ( 1 == dwCurSel ) ? SW_SHOW : SW_HIDE ); 
                    return TRUE;
            }
            break;
        }

        case WM_CLOSE:
            if( m_hDlgThread )
                PostQuitMessage( 0 );
            else
                EndDialog( hDlg, 0 );
            
            return TRUE;
    }

    return FALSE;
}




//-----------------------------------------------------------------------------
// Name: DlgProcPlayers()
// Desc: Dialog procedure for the UI
//-----------------------------------------------------------------------------
INT_PTR CALLBACK CSessionInfo::DlgProcPlayers( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
    switch( uMsg )
    {
        case WM_INITDIALOG:
        {
            // Set custom dialog settings
            if( m_hNameFont )
                SendMessage( GetDlgItem( hDlg, IDC_SI_NAME ), WM_SETFONT, (WPARAM) m_hNameFont, TRUE );

            if( m_hConnectionFont )
                SendMessage( GetDlgItem( hDlg, IDC_SI_DESCRIPTION ), WM_SETFONT, (WPARAM) m_hConnectionFont, TRUE );
            
            // Refresh the dialog contents
            PaintDialog( hDlg );
            m_bDlgValid = TRUE;
            
            // Set the refresh timer
            SetTimer( hDlg, SI_REFRESH_TIMER, SI_REFRESH_INTERVAL, NULL );
            return TRUE;
        }

        case WM_TIMER:
        {
            if( FALSE == m_bDlgValid )
                PaintDialog( hDlg );

            return TRUE;
        }

        case WM_COMMAND:
        {
            switch( LOWORD(wParam) )
            {
                case IDC_SI_PLAYERS:
                {
                    if( LBN_SELCHANGE == HIWORD(wParam) )
                    {
                        DWORD dwCurSel;
                        DWORD dwItemData;

                        if( LB_ERR != ( dwCurSel   = SendMessage( (HWND) lParam, LB_GETCURSEL, 0, 0 ) ) &&
                            LB_ERR != ( dwItemData = SendMessage( (HWND) lParam, LB_GETITEMDATA, dwCurSel, 0 ) ) )
                            DisplayPlayer( dwItemData, hDlg );
                            
                        return TRUE;
                    }

                    break;
                }

                case IDC_SI_GROUPS:
                {
                    if( LBN_SELCHANGE == HIWORD(wParam) )
                    {
                        DWORD dwCurSel;
                        DWORD dwItemData;

                        if( LB_ERR != ( dwCurSel   = SendMessage( (HWND) lParam, LB_GETCURSEL, 0, 0 ) ) &&
                            LB_ERR != ( dwItemData = SendMessage( (HWND) lParam, LB_GETITEMDATA, dwCurSel, 0 ) ) )
                            DisplayGroup( dwItemData, hDlg );
                            
                        return TRUE;
                    }

                    break;
                }

                case IDC_SI_MEMBERSHIP:
                {
                    if( LBN_SELCHANGE == HIWORD(wParam) )
                    {
                        DWORD dwCurSel;
                        DWORD dwItemData;

                        if( LB_ERR != ( dwCurSel   = SendMessage( (HWND) lParam, LB_GETCURSEL, 0, 0 ) ) &&
                            LB_ERR != ( dwItemData = SendMessage( (HWND) lParam, LB_GETITEMDATA, dwCurSel, 0 ) ) )
                        {
                            if( LB_ERR != SendMessage( GetDlgItem( hDlg, IDC_SI_PLAYERS ), LB_GETCURSEL, 0, 0 ) )
                                DisplayGroup( dwItemData, hDlg );   
                            else if( LB_ERR != SendMessage( GetDlgItem( hDlg, IDC_SI_GROUPS ), LB_GETCURSEL, 0, 0 ) )
                                DisplayPlayer( dwItemData, hDlg );
                        }

                        return TRUE;
                    }
                    break;
                }
            }
            break;
        }
    }

    return FALSE;
}




//-----------------------------------------------------------------------------
// Name: DlgProcMessages()
// Desc: Dialog procedure for the UI
//-----------------------------------------------------------------------------
INT_PTR CALLBACK CSessionInfo::DlgProcMessages( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
    switch( uMsg )
    {
        case WM_INITDIALOG:
        {
            // List box settings
            PostMessage( GetDlgItem( hDlg, IDC_SI_DPLAYMSG ), LB_INITSTORAGE, SI_MAX_MESSAGES, sizeof(TCHAR) * 256 );
            PostMessage( GetDlgItem( hDlg, IDC_SI_APPMSG ),   LB_INITSTORAGE, SI_MAX_MESSAGES, sizeof(TCHAR) * 256 );
            PostMessage( GetDlgItem( hDlg, IDC_SI_DPLAYMSG ), LB_SETHORIZONTALEXTENT, 400, 0 );
            PostMessage( GetDlgItem( hDlg, IDC_SI_APPMSG ),   LB_SETHORIZONTALEXTENT, 400, 0 );

            // Fill the message windows
            m_DPlayMessages.Lock();
            for( UINT i=0; i < m_DPlayMessages.GetNumOfMessages(); i++ )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91福利国产精品| 日本 国产 欧美色综合| 成人在线视频一区| 国产午夜精品久久久久久免费视 | 欧美一区二区三区婷婷月色| 亚洲大片精品永久免费| 337p亚洲精品色噜噜狠狠| 天堂久久久久va久久久久| 欧美大度的电影原声| 国产在线精品一区二区 | 国产精品毛片久久久久久| 风间由美性色一区二区三区| 亚洲免费视频成人| 欧美三片在线视频观看| 久久精品国产99久久6| 欧美精品一区二区三区视频| jvid福利写真一区二区三区| 一区二区高清在线| 欧美肥妇bbw| 成人精品视频一区二区三区 | 精品国产一区二区在线观看| 国产酒店精品激情| 亚洲精品免费在线| 91精品欧美久久久久久动漫 | 欧美一级高清大全免费观看| 国产一区不卡在线| 亚洲美腿欧美偷拍| 日韩一级免费观看| 99久久久久久| 美腿丝袜亚洲综合| 中文字幕一区二区视频| 91精品国产综合久久精品| 国产很黄免费观看久久| 亚洲国产欧美日韩另类综合| 国产亚洲一区二区三区| 欧洲生活片亚洲生活在线观看| 麻豆久久久久久| 亚洲欧洲av色图| 精品国产99国产精品| 在线观看www91| 成人动漫在线一区| 性久久久久久久久久久久| 国产日韩欧美综合在线| 欧美男女性生活在线直播观看| 风间由美一区二区三区在线观看| 日韩精品乱码av一区二区| 中文字幕在线观看一区二区| 日韩欧美的一区二区| 欧美性感一区二区三区| 国产69精品久久99不卡| 日韩电影网1区2区| 亚洲综合另类小说| 国产精品拍天天在线| 精品日韩99亚洲| 欧美久久久影院| 91福利在线观看| 91视频一区二区| 成人免费视频国产在线观看| 精品一区二区三区免费观看 | 欧美成人bangbros| 欧美日高清视频| 在线观看免费亚洲| 色综合视频一区二区三区高清| 国产91精品一区二区麻豆亚洲| 蜜臂av日日欢夜夜爽一区| 五月婷婷久久丁香| 亚洲一区二区不卡免费| 一区二区三区四区在线| 亚洲人妖av一区二区| 国产精品久线在线观看| 久久精品亚洲精品国产欧美| 久久午夜色播影院免费高清| 精品免费视频.| 精品国产一区二区三区av性色| 777欧美精品| 91精品国产综合久久精品图片| 欧美日韩午夜在线| 欧美日韩mp4| 欧美一级淫片007| 欧美tk—视频vk| 久久久久久久免费视频了| 久久色.com| 中文欧美字幕免费| 国产精品天天摸av网| 国产精品久久久久一区二区三区共| 久久久久久99久久久精品网站| 国产性色一区二区| 国产精品福利在线播放| 亚洲女同一区二区| 亚洲一区二区偷拍精品| 日本成人在线视频网站| 激情综合色播五月| 丰满放荡岳乱妇91ww| 91玉足脚交白嫩脚丫在线播放| 91麻豆免费看片| 欧美中文字幕不卡| 欧美一区二区网站| 国产性天天综合网| 亚洲男人的天堂在线观看| 偷拍一区二区三区| 久久99这里只有精品| 成人精品电影在线观看| 色婷婷精品久久二区二区蜜臂av| 91麻豆精品国产91久久久久久久久 | 国产精品国产三级国产三级人妇 | 亚洲欧美在线视频观看| 亚洲在线免费播放| 日韩电影免费在线观看网站| 蜜桃在线一区二区三区| 国产成a人无v码亚洲福利| 99视频精品在线| 9191久久久久久久久久久| 精品三级在线看| 亚洲日本欧美天堂| 麻豆成人免费电影| 97久久超碰国产精品| 7799精品视频| 一区在线播放视频| 免费成人av在线| 不卡一区在线观看| 91精品国产色综合久久不卡电影| 国产欧美日本一区视频| 午夜精品一区二区三区三上悠亚| 国产乱理伦片在线观看夜一区| 色综合久久88色综合天天| 日韩精品中文字幕在线不卡尤物| 国产精品久久久久久久久快鸭| 午夜精品一区二区三区三上悠亚| 成人一区二区三区在线观看 | 色婷婷精品久久二区二区蜜臀av| 精品国内二区三区| 亚洲国产日产av| av高清不卡在线| 精品国产百合女同互慰| 亚洲成人激情社区| 99综合电影在线视频| 欧美电影免费观看高清完整版 | 欧美日韩三级一区| 国产精品丝袜91| 久久精品免费看| 欧美日韩久久一区| 亚洲美女淫视频| 丰满白嫩尤物一区二区| 日韩精品自拍偷拍| 午夜视频在线观看一区二区| 成人美女视频在线观看| 国产夜色精品一区二区av| 免费高清成人在线| 欧美日韩的一区二区| 亚洲激情第一区| eeuss鲁片一区二区三区在线观看| 精品国精品国产| 久久精品国产秦先生| 日韩一级片网址| 丝袜美腿亚洲色图| 欧美午夜宅男影院| 亚洲国产精品麻豆| 欧洲国内综合视频| 一区二区三区丝袜| 91免费观看视频| 最新国产精品久久精品| 成人在线一区二区三区| 国产欧美日韩久久| 国产不卡高清在线观看视频| 久久麻豆一区二区| 国产一区二区美女诱惑| 91精品国产一区二区人妖| 免费成人美女在线观看| 欧美一区二区高清| 精品一区二区在线观看| 日韩欧美专区在线| 久久国产婷婷国产香蕉| 精品福利在线导航| 九色综合狠狠综合久久| 久久毛片高清国产| 高清在线成人网| 国产精品久久精品日日| av电影天堂一区二区在线| 中文字幕亚洲在| 色婷婷久久一区二区三区麻豆| 一区二区三区精品在线| 欧美日韩精品欧美日韩精品| 日韩精品三区四区| 日韩精品一区二区三区swag| 国产精品亚洲一区二区三区妖精| 久久久久国产一区二区三区四区| 国产精品亚洲视频| 亚洲激情自拍视频| 欧美精品自拍偷拍| 国内精品不卡在线| 国产精品久久夜| 欧洲视频一区二区| 麻豆中文一区二区| 国产精品乱码一区二三区小蝌蚪| 色诱亚洲精品久久久久久| 日韩高清电影一区| 久久久久久久久久久久久女国产乱| 不卡视频在线观看| 日韩精品亚洲一区| 国产精品麻豆久久久|