青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

最近想在MFC中運用D3D,直接來了就用的單文檔,結果調試半天還是坐標不對~

鼠標的位置就是y比畫的圖形要大,而且是越往右下角拉 y 距離相差就越大!!!

但是同樣的我用多文檔,還有對話框都沒有這種問題,請高手賜教@謝謝@

 

為什么多文檔,Dialog都沒這問題呢?
CODE:

// TestDSIView.cpp : CTestDSIView 類的實現
//

#include 
"stdafx.h"
#include 
"TestDSI.h"

#include 
"TestDSIDoc.h"
#include 
"TestDSIView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CTestDSIView
DWORD CTestDSIView::D3DFVF_CUSTOMVERTEX = (D3DFVF_XYZRHW|D3DFVF_DIFFUSE);
IMPLEMENT_DYNCREATE(CTestDSIView, CView)

BEGIN_MESSAGE_MAP(CTestDSIView, CView)
    
// 標準打印命令
    ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
    ON_WM_LBUTTONDOWN()
    ON_WM_LBUTTONUP()
    ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()

// CTestDSIView 構造/析構

CTestDSIView::CTestDSIView()
{
    
// TODO: 在此處添加構造代碼
    m_pD3D = NULL;
    m_pd3dDevice 
= NULL;
    m_pVB 
= NULL;
    m_bEdit 
= false;
}


CTestDSIView::
~CTestDSIView()
{
    
this->Cleanup();
}


BOOL CTestDSIView::PreCreateWindow(CREATESTRUCT
& cs)
{
    
// TODO: 在此處通過修改 CREATESTRUCT cs 來修改窗口類或
    
// 樣式

    
return CView::PreCreateWindow(cs);
}


// CTestDSIView 繪制

void CTestDSIView::OnDraw(CDC* /*pDC*/)
{
    CTestDSIDoc
* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    
if (!pDoc)
        
return;

    
// TODO: 在此處為本機數據添加繪制代碼
    Render();
}



// CTestDSIView 打印

BOOL CTestDSIView::OnPreparePrinting(CPrintInfo
* pInfo)
{
    
// 默認準備
    return DoPreparePrinting(pInfo);
}


void CTestDSIView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
    
// TODO: 打印前添加額外的初始化
}


void CTestDSIView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
    
// TODO: 打印后添加清除過程
}



// CTestDSIView 診斷

#ifdef _DEBUG
void CTestDSIView::AssertValid() const
{
    CView::AssertValid();
}


void CTestDSIView::Dump(CDumpContext& dc) const
{
    CView::Dump(dc);
}


CTestDSIDoc
* CTestDSIView::GetDocument() const // 非調試版本是內聯的
{
    ASSERT(m_pDocument
->IsKindOf(RUNTIME_CLASS(CTestDSIDoc)));
    
return (CTestDSIDoc*)m_pDocument;
}

#endif //_DEBUG

void CTestDSIView::OnInitialUpdate(void)
{
    CView::OnInitialUpdate();

    
this->InitD3D(m_hWnd);
    
//this->InitVB();
}


void CTestDSIView::OnLButtonDown(UINT nFlags, CPoint point)
{
    m_ptDown 
= point;
    m_bEdit 
= true;
    CView::OnLButtonDown(nFlags, point);
}


void CTestDSIView::OnLButtonUp(UINT nFlags, CPoint point)
{
    m_ptUp 
= point;
    m_bEdit 
= false;
    InitVB(m_ptDown.x, m_ptDown.y, point.x, point.y);
    Render();
    CView::OnLButtonUp(nFlags, point);
}


void CTestDSIView::OnMouseMove(UINT nFlags, CPoint point)
{
    
if (m_bEdit)
    
{
        m_ptMove 
= point;
        InitVB(m_ptDown.x, m_ptDown.y, point.x, point.y);
        Render();
    }

    CView::OnMouseMove(nFlags, point);
}



//////////////////////////////////////////////////////////////////////////
// d3d function
HRESULT CTestDSIView::InitD3D( HWND hWnd )
{
    
// Create the D3D object.
    if( NULL == ( m_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        
return E_FAIL;

    
// Set up the structure used to create the D3DDevice
    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory( 
&d3dpp, sizeof(d3dpp) );
    d3dpp.Windowed 
= TRUE;
    d3dpp.SwapEffect 
= D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat 
= D3DFMT_UNKNOWN;

    
// Create the D3DDevice
    if( FAILED( m_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
        D3DCREATE_SOFTWARE_VERTEXPROCESSING,
        
&d3dpp, &m_pd3dDevice ) ) )
    
{
        
return E_FAIL;
    }


    
// Device state would normally be set here

    
return S_OK;
}


HRESULT CTestDSIView::InitVB(
int x1 /* = 0 */int y1 /* = 0 */int x2 /* = 0 */int y2 /* = 0 */)
{
    
// Initialize three vertices for rendering a triangle
    CUSTOMVERTEX vertices[] =
    

        
//{  50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, },
        
//      { 50.0f,  50.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color
        
//      { 250.0f, 50.0f, 0.5f, 1.0f, 0xff00ff00, },
        
//{ 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, },
        
//{50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, },

        
{  x1, y2, 0.f, 0.0f0xff00ffff, },
        
{ x1,  y1, 0.f, 0.0f0xffff0000, }// x, y, z, rhw, color
        { x2, y1, 0.f, 0.0f0xff00ff00, },
        
{ x2, y2, 0.f, 0.0f0xff00ff00, },
        
{x1, y2, 0.f, 0.0f0xff00ffff, },

    }
;

    
// Create the vertex buffer. Here we are allocating enough memory
    
// (from the default pool) to hold all our 3 custom vertices. We also
    
// specify the FVF, so the vertex buffer knows what data it contains.
    if( FAILED( m_pd3dDevice->CreateVertexBuffer(5*sizeof(CUSTOMVERTEX),
        
0, D3DFVF_CUSTOMVERTEX,
        D3DPOOL_DEFAULT, 
&m_pVB, NULL ) ) )
    
{
        
return E_FAIL;
    }


    
// Now we fill the vertex buffer. To do this, we need to Lock() the VB to
    
// gain access to the vertices. This mechanism is required becuase vertex
    
// buffers may be in device memory.
    VOID* pVertices;
    
if( FAILED( m_pVB->Lock( 0sizeof(vertices), (void**)&pVertices, 0 ) ) )
        
return E_FAIL;
    memcpy( pVertices, vertices, 
sizeof(vertices) );
    m_pVB
->Unlock();

    
return S_OK;
}


VOID CTestDSIView::Cleanup()
{
    
if( m_pVB != NULL )        
        m_pVB
->Release();

    
if( m_pd3dDevice != NULL ) 
        m_pd3dDevice
->Release();

    
if( m_pD3D != NULL )       
        m_pD3D
->Release();
}


VOID CTestDSIView::Render()
{
    
// Clear the backbuffer to a blue color
    m_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f0 );

    
// Begin the scene
    if( SUCCEEDED( m_pd3dDevice->BeginScene() ) )
    
{
        
// Draw the triangles in the vertex buffer. This is broken into a few
        
// steps. We are passing the vertices down a "stream", so first we need
        
// to specify the source of that stream, which is our vertex buffer. Then
        
// we need to let D3D know what vertex shader to use. Full, custom vertex
        
// shaders are an advanced topic, but in most cases the vertex shader is
        
// just the FVF, so that D3D knows what type of vertices we are dealing
        
// with. Finally, we call DrawPrimitive() which does the actual rendering
        
// of our geometry (in this case, just one triangle).
        m_pd3dDevice->SetStreamSource( 0, m_pVB, 0sizeof(CUSTOMVERTEX) );
        m_pd3dDevice
->SetFVF( D3DFVF_CUSTOMVERTEX );
        m_pd3dDevice
->DrawPrimitive( D3DPT_LINESTRIP, 04 );

        
// End the scene
        m_pd3dDevice->EndScene();
    }


    
// Present the backbuffer contents to the display
    m_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}

//////////////////////////////////////////////////////////////////////////
// CTestDSIView 消息處理程序

 

// TestDSIView.h : CTestDSIView 類的接口
//


#pragma once

#include 
<d3d9.h>
#include 
<d3dx9.h>
#pragma comment(lib, 
"d3d9.lib")
#pragma comment(lib, 
"d3dx9.lib")
#pragma comment(lib, 
"winmm.lib")
#pragma warning(disable : 
4244)

class CTestDSIView : public CView
{
protected// 僅從序列化創建
    CTestDSIView();
    DECLARE_DYNCREATE(CTestDSIView)

// 屬性
public:
    CTestDSIDoc
* GetDocument() const;

// 操作
public:

// 重寫
    public:
    
virtual void OnDraw(CDC* pDC);  // 重寫以繪制該視圖
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
    
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
    
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
    
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

//d3d member
private:
    LPDIRECT3D9                m_pD3D;
    LPDIRECT3DDEVICE9        m_pd3dDevice;
    LPDIRECT3DVERTEXBUFFER9    m_pVB;

    POINT m_ptDown;
    POINT m_ptUp;
    POINT m_ptMove;
    
bool  m_bEdit;
//d3d function member
protected:
    HRESULT InitD3D( HWND hWnd );
    HRESULT InitVB(
int x1 = 0int y1 = 0int x2 = 0int y2 = 0);
    VOID Cleanup();
    VOID Render();
    
    
struct CUSTOMVERTEX
    
{
        FLOAT x, y, z, rhw; 
// The transformed position for the vertex
        DWORD color;        // The vertex color
    }
;

    
// Our custom FVF, which describes our custom vertex structure
    static DWORD D3DFVF_CUSTOMVERTEX;
    
//#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
// 實現
public:
    
virtual ~CTestDSIView();
#ifdef _DEBUG
    
virtual void AssertValid() const;
    
virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// 生成的消息映射函數
protected:
    DECLARE_MESSAGE_MAP()
    afx_msg 
void OnLButtonDown(UINT nFlags, CPoint point);
    afx_msg 
void OnLButtonUp(UINT nFlags, CPoint point);
    afx_msg 
void OnMouseMove(UINT nFlags, CPoint point);
public:
    
virtual void OnInitialUpdate(void);
}
;

#ifndef _DEBUG  
// TestDSIView.cpp 的調試版本
inline CTestDSIDoc* CTestDSIView::GetDocument() const
   
return reinterpret_cast<CTestDSIDoc*>(m_pDocument); }
#endif


Feedback

# re: 為什么在MFC中的單文檔下用D3D畫圖坐標不對盤!  回復  更多評論   

2008-09-17 13:34 by 小不點
請高手賜教嘍!!!!

# re: 為什么在MFC中的單文檔下用D3D畫圖坐標不對盤!  回復  更多評論   

2008-09-19 16:50 by 匿名
我也遇到過這樣的問題,創建的800*600的窗口,用getclientrect得到的矩形居然是950*666的,在view視圖中用directx也是短一塊,就相是說我的鼠標消息坐標是800*600,但是view是950*666的,剛剛發現還沒仔細研究,不過這很可能是mfc的問題

# re: 為什么在MFC中的單文檔下用D3D畫圖坐標不對盤!  回復  更多評論   

2008-09-19 19:12 by 小不點
但是 多文檔的 只要視圖大小不改變 那么就沒有偏差,一旦視圖大小改變也就又偏差了,
單文檔 當一開始 創建,沒有添加多的東西的時候(比如左邊添加有樹控件對話框)那么就只有y坐標又偏差,但是當添加后x,y多有偏差了。
對話框 倒是還好~
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            免费久久久一本精品久久区| 一区二区三区精品视频在线观看| 亚洲小说区图片区| 一区二区三区欧美成人| 欧美视频一区二区在线观看| 亚洲永久视频| 欧美有码在线观看视频| 一区二区亚洲精品| 亚洲欧洲日本国产| 欧美三级乱码| 久久精品国产清自在天天线| 久久久精品性| av不卡在线观看| 午夜精品999| 亚洲精品日韩激情在线电影| 99精品欧美一区二区三区| 国产精自产拍久久久久久| 麻豆av福利av久久av| 欧美区高清在线| 久久久精品日韩欧美| 欧美激情小视频| 欧美亚洲在线观看| 欧美成人国产一区二区| 亚洲欧美日韩国产一区二区| 久久青草久久| 午夜在线观看免费一区| 狼人社综合社区| 欧美一级淫片播放口| 免费中文字幕日韩欧美| 欧美主播一区二区三区| 欧美久久婷婷综合色| 久久亚洲一区二区| 国产精品久久久久国产精品日日| 久久米奇亚洲| 国产精品高潮呻吟久久av无限 | 亚欧成人精品| 欧美精品二区| 欧美激情精品久久久久久黑人| 国产精品一区视频网站| 亚洲日本视频| 1024国产精品| 久久久xxx| 久久精品国产在热久久 | 欧美成人午夜| 免费不卡在线观看av| 国产乱码精品一区二区三区忘忧草| 亚洲电影免费观看高清完整版| 国产在线乱码一区二区三区| 中文av字幕一区| 亚洲视频福利| 欧美另类极品videosbest最新版本| 美女诱惑一区| 在线激情影院一区| 久久久久久免费| 久久久人人人| 韩国精品主播一区二区在线观看| 亚洲欧美日本日韩| 欧美亚洲视频一区二区| 亚洲国产99| 亚洲欧美久久久| 欧美在线观看视频一区二区三区 | 亚洲人成77777在线观看网| 精品成人在线观看| 久久综合激情| 亚洲高清免费视频| 亚洲日韩成人| 欧美日韩精品一区二区| 亚洲精品免费在线播放| 亚洲最新视频在线| 欧美三日本三级三级在线播放| 亚洲精品影视在线观看| 在线视频你懂得一区二区三区| 欧美精品久久天天躁| 一本色道88久久加勒比精品 | 欧美一区二区视频免费观看| 国产精品一区在线观看| 亚洲欧美乱综合| 久热这里只精品99re8久| 亚洲电影免费观看高清完整版在线| 久久蜜桃精品| 亚洲精品一区二区三区樱花 | 亚洲激情在线| 欧美日韩一区在线观看| 亚洲欧美文学| 欧美va天堂| 亚洲一区二区成人| 国产一区二区av| 欧美高清不卡| 亚洲欧美电影院| 免费成人黄色av| 99伊人成综合| 国产一级一区二区| 欧美精品日韩www.p站| 亚洲一区在线直播| 欧美成人一区二区在线| 亚洲一区观看| 亚洲国产中文字幕在线观看| 欧美三级韩国三级日本三斤| 欧美一区二区三区视频| 亚洲精品乱码久久久久久| 欧美一区二区久久久| 亚洲乱码精品一二三四区日韩在线| 国产精品99一区| 裸体素人女欧美日韩| 亚洲一区二区三区欧美| 欧美激情一区三区| 久久成人免费视频| 在线视频欧美日韩| 亚洲福利久久| 国产日韩一级二级三级| 欧美三级免费| 欧美黄色小视频| 久久久另类综合| 亚洲欧美国产毛片在线| 亚洲精品男同| 亚洲国产精品激情在线观看| 久久色在线观看| 香蕉国产精品偷在线观看不卡| 亚洲美女视频在线观看| 伊人伊人伊人久久| 国产一级精品aaaaa看| 国产精品九九| 欧美视频在线一区| 欧美日韩国产va另类| 久久一本综合频道| 欧美丝袜一区二区三区| 久久精品欧洲| 欧美在线亚洲一区| 欧美一级在线播放| 午夜精品一区二区在线观看| 亚洲精品国产欧美| 欧美岛国激情| 欧美国产日韩一区二区在线观看| 久久久久国产一区二区三区四区 | 亚洲三级视频在线观看| 亚洲高清一区二| 在线看欧美视频| 亚洲高清一二三区| 亚洲激情在线| 99香蕉国产精品偷在线观看| 亚洲黄色av一区| 亚洲欧洲精品一区二区| 最新国产成人在线观看| 亚洲国产网站| 亚洲欧洲精品一区二区三区| 亚洲精选视频在线| 亚洲视频在线观看三级| 亚洲综合精品一区二区| 亚洲欧美精品中文字幕在线| 午夜精品三级视频福利| 欧美一区二区视频在线| 久久亚洲精品网站| 欧美激情亚洲综合一区| 亚洲精品在线免费| 亚洲无线视频| 久久激情久久| 欧美激情精品久久久久久久变态| 欧美黄色免费| 国产精品欧美在线| 在线播放中文一区| 99视频超级精品| 欧美一区不卡| 亚洲第一精品在线| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲欧美精品| 久久久久99精品国产片| 欧美国产日韩亚洲一区| 欧美午夜电影网| 国内精品久久久久影院 日本资源| 影音先锋在线一区| 中文日韩欧美| 久久视频在线看| 亚洲精品一区二区三区99| 亚洲欧美激情视频| 欧美福利视频| 国模一区二区三区| 在线综合视频| 免费看黄裸体一级大秀欧美| 亚洲免费av电影| 久久米奇亚洲| 国产精品视频自拍| 亚洲精品久久久久久一区二区| 亚洲欧美在线x视频| 欧美成人免费观看| 亚洲女爱视频在线| 欧美日韩mv| 亚洲大片av| 欧美与黑人午夜性猛交久久久| 亚洲动漫精品| 久久国产精品久久久久久电车| 欧美日韩国产首页在线观看| 国产亚洲一二三区| 亚洲欧美日韩国产综合精品二区| 欧美成人精品不卡视频在线观看| 亚洲小说区图片区| 欧美精品一区二区三区视频| 在线播放视频一区| 久久精品二区| 亚洲欧美清纯在线制服| 欧美视频四区|