R3中微软的Silverlight的例子XAMLPERF中的FRM_START,FRM_STOP,FRM_GET_FRAMES_PER_SECOND什么意思?

benz040   2010-3-30 10:03 楼主
这三个东西在main.cpp中定义的:
class FrameRateManager
{
    enum FrameRateMonitorMessage   
    {
        FRM_START = 0,
        FRM_STOP,
        FRM_GET_FRAMES_PER_SECOND
    };

使用如下:
    //Register the message with the host
    HRESULT RegisterMessage()
    {
        HRESULT hr = S_OK;

        m_TestMessage = RegisterWindowMessage(c_FrameRateMessageName);
        CBR(0 != m_TestMessage);

        CHR(static_cast(SendMessage(m_Hwnd, m_TestMessage, FRM_START, 0)));
    Error:
        return hr;
    }       

还有就是:
    // get the current frame rate
    HRESULT
    GetFrameRate(UINT * pFPS)
    {
        HRESULT hr = S_OK;
        DWORD ProcessId = NULL;
   
        HANDLE hRemoteProcess = NULL;
        VOID* pResultBuffer = NULL;
        float Result = 0.0;
               
        // Get a handle to the EXR process containing the target HWND
        GetWindowThreadProcessId(m_Hwnd, &ProcessId);
        hRemoteProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessId);
        
        // Allocate memory in the EXR process to marshal the fps counter over to this process
        pResultBuffer = VirtualAllocEx(hRemoteProcess, NULL, sizeof(FLOAT), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
        CPR(pResultBuffer);
   
        hr = static_cast(SendMessage(m_Hwnd, m_TestMessage, FRM_GET_FRAMES_PER_SECOND, (LPARAM)pResultBuffer));
        CHR(hr);
   
        // Read back EXR's response
        CBREx(ReadProcessMemory(hRemoteProcess, pResultBuffer, (LPVOID)(&Result), sizeof(FLOAT), NULL), GetLastErrorHR());
   
        if (pFPS)
        {
            *pFPS = (UINT)Result;
        }
        
    Error:
        if (pResultBuffer)
        {
            VirtualFreeEx(hRemoteProcess, pResultBuffer, 0, MEM_RELEASE);
        }

        return hr;
    }


=======================================================       
CHR(static_cast(SendMessage(m_Hwnd, m_TestMessage, FRM_START, 0)));

hr = static_cast(SendMessage(m_Hwnd, m_TestMessage, FRM_GET_FRAMES_PER_SECOND, (LPARAM)pResultBuffer));

把这两个消息发出去,我看的比较迷茫一个.
我猜测这应该是Silverlight的内部实现的.但是MSDN中没有,不知道如何整.
资料太少了...水平不行啊...

回复评论 (3)

[url=http://www.cnblogs.com/wangkewei/archive/2009/12/24/1631644.html][/url]

楼主问问博主吧,他好像对Silverlight非常熟悉。
点赞  2010-3-30 13:11
引用: 引用 1 楼 sunrain_hjb 的回复:

http://www.cnblogs.com/wangkewei/archive/2009/12/24/1631644.html

楼主问问博主吧,他好像对Silverlight非常熟悉。


好建议!我就是看这个博客和国外的一个博客学习silverlight
点赞  2010-3-30 14:14
已经问了王克伟了,期待他的回复.
点赞  2010-3-30 14:48
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复