Farzandekurosh
پنج شنبه 27 مرداد 1390, 02:16 صبح
با سلام خدمت همه دوستان .
یه برنامه ساده نوشتم که یه پنجره win32 ایجاد میکنه و وسط صفحه یه متن مینویسه و Frame Per Second رو بالای پتجره مینویسه:خجالت:
MessageBox(0,"Register Class Failed !","ERROR",MB_OK);
error::ناراحت:
error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [24]' to 'LPCWSTR'
برا پارامتر سوم هم خطا میده البته اگه از ماکروی TEXT به صورت زیر استفاده کنم خطا نمیده :
MessageBox(0,TEXT("Register Class Failed !"),TEXT("ERROR"),MB_OK]);
و مشکل اصلی :
void render( void )
{
//declares
RECT rectFormat;
GetClientRect(hwnd,&rectFormat);
D3DXFONT_DESC fontDesc;
static char buffer[256];
//----------------------------
fontDesc.Height = 30;
fontDesc.Width = 20;
fontDesc.Weight = FW_BOLD;
fontDesc.MipLevels = 0;
fontDesc.Italic = false;
fontDesc.CharSet = DEFAULT_CHARSET;
fontDesc.OutputPrecision = OUT_DEFAULT_PRECIS;
fontDesc.Quality = DEFAULT_QUALITY;
fontDesc.PitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
wcscpy_s(fontDesc.FaceName,_T("Times New Roman"));
D3DXCreateFontIndirect(MyDevice,&fontDesc,&mFont);
sprintf(buffer, "Frames Per Second = %.2f",dt);
MyDevice->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
MyDevice->BeginScene();
// Render geometry here...
mFont->DrawText(0,buffer,-1,&rectFormat,DT_NOCLIP,D3DCOLOR_XRGB(100,100,100));
mFont->DrawText(0,TEXT("Hello d3d World."),-1,&rectFormat,DT_CENTER | DT_VCENTER,D3DCOLOR_XRGB(100,100,100));
MyDevice->EndScene();
MyDevice->Present( NULL, NULL, NULL, NULL );
}
error ::ناراحت:
error C2664: 'ID3DXFont::DrawTextW' : cannot convert parameter 2 from 'char [256]' to 'LPCWSTR'
در ضمن :
float dt;
به صورت سراسری تعریف شده که قبل از اجرا شدن تابع render در حلقه اصلی برنامه مقدار FPS محاسبه و تو این متغیر ریخته میشه. روش محاسبه FPS رو تو کتاب Introduction to 3d game programming wint directx 9 :shader گفته که سورس های مثال هاش رو دارم ولی تو سورس ها همچین خطایی نمیده من تو vs2010 کد مینویسم تو vs2008 هم همین مشکل رو داشتم
اگه خط :
mFont->DrawText(0,buffer,-1,&rectFormat,DT_NOCLIP,D3DCOLOR_XRGB(100,100,100));
رو به صورت :
mFont->DrawText(0,(LPCWSTR)buffer,-1,&rectFormat,DT_NOCLIP,D3DCOLOR_XRGB(100,100,100));
بنویسیم خطا نمیده ولی buffer رو به صورت کاراکتر های نا مفهوم جاپ می کنه .:ناراحت:
یه برنامه ساده نوشتم که یه پنجره win32 ایجاد میکنه و وسط صفحه یه متن مینویسه و Frame Per Second رو بالای پتجره مینویسه:خجالت:
MessageBox(0,"Register Class Failed !","ERROR",MB_OK);
error::ناراحت:
error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [24]' to 'LPCWSTR'
برا پارامتر سوم هم خطا میده البته اگه از ماکروی TEXT به صورت زیر استفاده کنم خطا نمیده :
MessageBox(0,TEXT("Register Class Failed !"),TEXT("ERROR"),MB_OK]);
و مشکل اصلی :
void render( void )
{
//declares
RECT rectFormat;
GetClientRect(hwnd,&rectFormat);
D3DXFONT_DESC fontDesc;
static char buffer[256];
//----------------------------
fontDesc.Height = 30;
fontDesc.Width = 20;
fontDesc.Weight = FW_BOLD;
fontDesc.MipLevels = 0;
fontDesc.Italic = false;
fontDesc.CharSet = DEFAULT_CHARSET;
fontDesc.OutputPrecision = OUT_DEFAULT_PRECIS;
fontDesc.Quality = DEFAULT_QUALITY;
fontDesc.PitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
wcscpy_s(fontDesc.FaceName,_T("Times New Roman"));
D3DXCreateFontIndirect(MyDevice,&fontDesc,&mFont);
sprintf(buffer, "Frames Per Second = %.2f",dt);
MyDevice->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
MyDevice->BeginScene();
// Render geometry here...
mFont->DrawText(0,buffer,-1,&rectFormat,DT_NOCLIP,D3DCOLOR_XRGB(100,100,100));
mFont->DrawText(0,TEXT("Hello d3d World."),-1,&rectFormat,DT_CENTER | DT_VCENTER,D3DCOLOR_XRGB(100,100,100));
MyDevice->EndScene();
MyDevice->Present( NULL, NULL, NULL, NULL );
}
error ::ناراحت:
error C2664: 'ID3DXFont::DrawTextW' : cannot convert parameter 2 from 'char [256]' to 'LPCWSTR'
در ضمن :
float dt;
به صورت سراسری تعریف شده که قبل از اجرا شدن تابع render در حلقه اصلی برنامه مقدار FPS محاسبه و تو این متغیر ریخته میشه. روش محاسبه FPS رو تو کتاب Introduction to 3d game programming wint directx 9 :shader گفته که سورس های مثال هاش رو دارم ولی تو سورس ها همچین خطایی نمیده من تو vs2010 کد مینویسم تو vs2008 هم همین مشکل رو داشتم
اگه خط :
mFont->DrawText(0,buffer,-1,&rectFormat,DT_NOCLIP,D3DCOLOR_XRGB(100,100,100));
رو به صورت :
mFont->DrawText(0,(LPCWSTR)buffer,-1,&rectFormat,DT_NOCLIP,D3DCOLOR_XRGB(100,100,100));
بنویسیم خطا نمیده ولی buffer رو به صورت کاراکتر های نا مفهوم جاپ می کنه .:ناراحت: