愚蠢的 VC问题,HELP !!

westman 2000-09-04 11:12:00
小弟最近才升级,才安了VC,很想写一个DirectX的程序:简单到表面画点,但是VC 5。0用的是 DevStudio我不要他帮我生成代码,而VC5的选项太复杂,各位大哥可否以画点为例从 File->New到编译给我讲讲如何制作一个640x480x8bit的画点程序。
感激不尽!!
...全文
332 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
westman 2000-09-09
  • 打赏
  • 举报
回复
感激不尽
Kevin_qing 2000-09-07
  • 打赏
  • 举报
回复
不建立主窗口能否进行全屏作图?
我还没有试过,你可以试试。
将上面程序的
if ( lpDD->SetCooperativeLevel( NULL, DDSCL_NORMAL ) != DD_OK)
return FALSE;
改成
if ( lpDD->SetCooperativeLevel( NULL, DDSCL_EXCLUSIVE ) != DD_OK)
return FALSE;

然后调用
lpDD->SetDisplayMode(640,480,8,NULL,NULL);
看看能否成功。
不过不建议用这种方法。



westman 2000-09-06
  • 打赏
  • 举报
回复
多谢了,Kevin现在真确了,是我VC5的问题现在换了VC6什么都正常了,最后一个问题:
不建立主窗口能否进行全屏作图?HINSTANCE是什么?
Thank you!! thank you!!
Kevin_qing 2000-09-05
  • 打赏
  • 举报
回复
to iforever:
呵呵,我还真的不太懂MFC得那一套。
Kevin_qing 2000-09-05
  • 打赏
  • 举报
回复
1.这是一个簡單得例子,所以用的console application 方式写的。和普通dos程序差不多.
2.全屏和窗口模式都一样的,只是在程序里面设置Dx工作模式不同。他們
都可以使用new ->project->(MFC Application)/(Win32 Application)
MFC/WIN32 API 方式都只是拿来建窗口的,具体得看看windows编程得书吧。
其中MFC方式建窗口非常方便,你几乎不需修改他生成得代码。
我先发一个中文的Dx帮助给你看看

iforever 2000-09-05
  • 打赏
  • 举报
回复
我认为你连WIZARD生成的代码都还不能完全看懂的情况下,
自己还能写什么代码!

即使是一些高手, 也不是对WIZARD不屑一顾的.

想想用VC编程本身就是一件很苦的事了, 那么一点帮助都还不要.

是不是你连CLASS WZARD也不想用!
westman 2000-09-05
  • 打赏
  • 举报
回复
Help !! Help !!
元明 2000-09-05
  • 打赏
  • 举报
回复
attention
westman 2000-09-05
  • 打赏
  • 举报
回复
1. 为什么是main()而不是WinMain() ?
2. 创建一个适合全屏DirectX编程的Project应选哪一项 File->New ??
3. 我主要不熟悉VC环境,我不想在开始时就让VC自动生成代码,能从打开VC 5。0到编译STEP BY STEP地和我讲讲。
4. Thank you ! Thank you !
Kevin_qing 2000-09-05
  • 打赏
  • 举报
回复
这是别人写的一个例子,我把他改了一下
工作于窗口模式的,我会再发一个全屏的例子程序给你看
#include <windows.h>
#include <ddraw.h>
#include <stdio.h>
#include <conio.h>

LPDIRECTDRAW lpDD; // DirectDraw对象
LPDIRECTDRAWSURFACE lpDDSPrimary; // DirectDraw主页面

char szMsg1[] = "Hello World, I am DirectDraw !";
char szMsg2[] = "按任意键退出";

//函数声明

BOOL InitDDraw( void );
void FreeDDraw( void );
BOOL DDraw( void );

void main()
{
//初始化DirectDraw环境,并实现DirectDraw功能
if ( !InitDDraw())
{
MessageBox(NULL, "初始化DirectDraw过程中出错!", "Error", MB_OK );
FreeDDraw();
return;
}

DDraw();
_getch();

FreeDDraw();
}

//******************************************************************
//函数:InitDDraw()
//功能:初始化DirectDraw环境并实现其功能。
//包括:创建DirectDraw对象,设置显示模式,创建主页面,输出文字。
//******************************************************************
BOOL InitDDraw(void)
{
int ret;
DDSURFACEDESC ddsd; //页面描述

if ( DirectDrawCreate( NULL, &lpDD, NULL ) != DD_OK ) return FALSE;
if ( lpDD->SetCooperativeLevel( NULL, DDSCL_NORMAL ) != DD_OK)
return FALSE;

//填充主页面信息
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
ret = lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );
if (ret!= DD_OK) return FALSE;

return TRUE;
}

//******************************************************************
//函数:DDraw()
//功能:作图。
//******************************************************************
BOOL DDraw( void )
{
DDSURFACEDESC ddsd; //页面描述
ddsd.dwSize=sizeof(ddsd);
lpDDSPrimary->Lock(NULL,&ddsd,DDLOCK_WAIT,0); //锁定主缓冲区
//
//
LPVOID lpVideoBuffer=ddsd.lpSurface;
// lpVideoBuffer 是指向显示缓冲区的,你自己根据像素格式画点就可以了
memset(lpVideoBuffer,0,640*480);
lpDDSPrimary->Unlock(NULL); //解锁主缓冲区

return TRUE;
}

//******************************************************************
//函数:FreeDDraw()
//功能:释放所有的DirectDraw对象。
//******************************************************************
void FreeDDraw( void )
{
if( lpDD != NULL )
{
if( lpDDSPrimary != NULL )
{
lpDDSPrimary->Release();
lpDDSPrimary = NULL;
}
lpDD->Release();
lpDD = NULL;
}
}
Kevin_qing 2000-09-05
  • 打赏
  • 举报
回复
是全屏還是窗口方式?
Kevin_qing 2000-09-05
  • 打赏
  • 举报
回复
Loaded 'C:\WIN9X\SYSTEM\VERSION.DLL', no matching symbolic information found.
Loaded 'C:\WIN9X\SYSTEM\ADVAPI32.DLL', no matching symbolic information found.
Loaded 'C:\WIN9X\SYSTEM\GDI32.DLL', no matching symbolic information found.
Loaded 'C:\WIN9X\SYSTEM\USER32.DLL', no matching symbolic information found.
Loaded 'C:\WIN9X\SYSTEM\KERNEL32.DLL', no matching symbolic information found.
Loaded 'C:\WIN9X\SYSTEM\NTDLL.DLL', no matching symbolic information found.
Loaded 'C:\WIN9X\SYSTEM\DDRAW.DLL', no matching symbolic information found.
Loaded 'C:\WIN9X\SYSTEM\IMM32.DLL', no matching symbolic information found.
Loaded 'C:\WIN9X\SYSTEM\INDICDLL.DLL', no matching symbolic information found.
The thread 0xFFFBD603 has exited with code 0 (0x0).
这些都是正常的调试信息。
但是为什么会死机就不知道了,你试试用console方式建立一个项目,在main里面调MessageBox(),會不會死机?
westman 2000-09-05
  • 打赏
  • 举报
回复
我用步骤:new->projects->Win32 Application然后在Project中新增源文件:
#include <windows.h>
int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nCmdShow)
{ MessageBox(NULL,"Hello World","Message",MB_OK);
return NULL;
}
但是按F5编译是可以运行,但会出现:
Loaded 'C:\WIN9X\SYSTEM\VERSION.DLL', no matching symbolic information found.
Loaded 'C:\WIN9X\SYSTEM\ADVAPI32.DLL', no matching symbolic information found.
Loaded 'C:\WIN9X\SYSTEM\GDI32.DLL', no matching symbolic information found.
Loaded 'C:\WIN9X\SYSTEM\USER32.DLL', no matching symbolic information found.
Loaded 'C:\WIN9X\SYSTEM\KERNEL32.DLL', no matching symbolic information found.
Loaded 'C:\WIN9X\SYSTEM\NTDLL.DLL', no matching symbolic information found.
Loaded 'C:\WIN9X\SYSTEM\DDRAW.DLL', no matching symbolic information found.
Loaded 'C:\WIN9X\SYSTEM\IMM32.DLL', no matching symbolic information found.
Loaded 'C:\WIN9X\SYSTEM\INDICDLL.DLL', no matching symbolic information found.
The thread 0xFFFBD603 has exited with code 0 (0x0).
而且多运行几次就会死机,这到底是为什么?
Help Help !!

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧