KWindow.h  KWindow.cpp

KDDrawWindow.cpp

 #define STRICT
#define WIN32_LEAN_AND_MEAN #include <windows.h>
#include <assert.h>
#include <tchar.h>
#include <ddraw.h> #include "KWindow.h"
#pragma comment(lib,"ddraw") const TCHAR szMessage[] = _T("Hello World!");
const TCHAR szFace[] = _T("Times New Roman");
const TCHAR szHint[] = _T("press ESC to quit.");
const TCHAR szProgram[] = _T("HelloWorld4"); class KDDrawWindow : public KWindow
{
LPDIRECTDRAW lpdd;
LPDIRECTDRAWSURFACE lpddsprimary; void OnKeyDown(WPARAM wParam, LPARAM lParam)
{
if(wParam == VK_ESCAPE)
{
PostMessage(m_hWnd, WM_CLOSE, , );
}
} void Blend(int left, int right, int top, int bottom); void OnDraw(HDC hdc)
{
TextOut(hdc, , , szHint, lstrlen(szHint));
CenterText(hdc, GetSystemMetrics(SM_CXSCREEN) / ,
GetSystemMetrics(SM_CYSCREEN) / ,
szFace, szMessage, );
Blend(, , , );
} public:
KDDrawWindow()
{
lpdd = NULL;
lpddsprimary = NULL;
} ~KDDrawWindow()
{
if(lpddsprimary)
{
lpddsprimary->Release();
lpddsprimary = NULL;
} if(lpdd)
{
lpdd->Release();
lpdd = NULL;
}
} bool CreateSurface();
}; bool KDDrawWindow::CreateSurface()
{
HRESULT hr;
hr = DirectDrawCreate(NULL, &lpdd, NULL);
if(hr != DD_OK)
return false; hr = lpdd->SetCooperativeLevel(m_hWnd, DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE);
if(hr != DD_OK)
return false; hr = lpdd->SetDisplayMode(, , );
if(hr != DD_OK)
return false; DDSURFACEDESC ddsd;
memset(&ddsd, , sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; return lpdd->CreateSurface(&ddsd, &lpddsprimary, NULL) == DD_OK;
} void inline Blend(unsigned char* dest, unsigned char* src)
{
if(!dest || !src)
return; dest[] = (dest[] + src[]) / ;
dest[] = (dest[] + src[]) / ;
dest[] = (dest[] + src[]) / ;
} void KDDrawWindow::Blend(int left, int right, int top, int bottom)
{
DDSURFACEDESC ddsd;
memset(&ddsd, , sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd); HRESULT hr = lpddsprimary->Lock(NULL, &ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL);
assert(hr == DD_OK); unsigned char* screen = (unsigned char*)ddsd.lpSurface; for(int y = top; y < bottom; ++y)
{
unsigned char* pixel = screen + y * ddsd.lPitch + left * ;
for(int x = left; x < right; ++x, pixel += )
{
if(pixel[] != || pixel[] != || pixel[] != )
{
::Blend(pixel - , pixel); //left
::Blend(pixel + , pixel); //right
::Blend(pixel - ddsd.lPitch, pixel); //up
::Blend(pixel + ddsd.lPitch, pixel); //down
}
}
} lpddsprimary->Unlock(ddsd.lpSurface);
} int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd )
{
KDDrawWindow win;
win.CreateEx(, szProgram, szProgram, WS_POPUP, GetSystemMetrics(SM_CXSCREEN) / , GetSystemMetrics(SM_CXSCREEN) / ,
GetSystemMetrics(SM_CXSCREEN) / , GetSystemMetrics(SM_CYSCREEN) / ,
NULL, NULL, hInstance); win.CreateSurface();
win.ShowWindow(nShowCmd);
win.UpdateWindow(); return win.MessageLoop();
}

DirectDraw创建Windows窗口的更多相关文章

  1. Direct3D 12 创建windows窗口

    之前列出了计算机图形学的计划,现在开始这一阶段的学习,首先是Windows窗口的创建. 创建windows窗口 环境: 1. Visual Studio 2015 新建项目 创建工程项目完成,确定为窗 ...

  2. win32手动创建windows窗口的,小记

    摘抄自文档,其中的函数需要以后花时间看 向 WinMain 添加功能 首先,在 WinMain 函数内部创建 WNDCLASSEX 类型的窗口类结构. 此结构包含有关窗口的信息,如应用程序图标.窗口的 ...

  3. 创建windows窗口

    from tkinter import * win=Tk()                                       #创建窗口对象 win.title("我的第一个gu ...

  4. win32 api Windows窗口的创建

    windows窗口的创建有以下几个步骤: 1.创建注册窗口类 2.创建窗口句柄 3.显示更新窗口 4.消息循环 1.创建注册窗口类 所谓创建窗口类就是定义一个WNDCLASS类对象,并将该对象进行初始 ...

  5. Windows窗口的创建

    Windows窗口创建的基本代码: #include <Windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); i ...

  6. Windows窗口创建的具体步骤

    /*实现窗口创建的六步骤:第一步:创建入口函数WinMain第二步:注册窗口类第三部:实现回调函数的功能第四步:显示窗口第五步:更新窗口第六步:消息循环*/ #include "stdafx ...

  7. 深入解析Windows窗口创建和消息分发(三个核心问题:怎么将不同的窗口过程勾到一起,将不同的hwnd消息分发给对应的CWnd类去处理,CWnd如何简单有效的去处理消息,由浅入深,非常清楚) good

    笔记:争取不用看下面的内容,只看自己的笔记,就能记住这个流程,就算明白了: _tWinMain-->AfxWinMain,它调用四个函数: -->AfxWinInit用于做一些框架的初始化 ...

  8. java最简单的知识之创建一个简单的windows窗口,利用Frame类

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 微博:http://weibo.com/mcxiaobing 首先给大家看一下 ...

  9. 【转】Windows 窗口层次关系

    原文链接:undefined! 相信在Windows 下面编程的很多兄弟们都不是很清楚Windows 中窗口的层次关系是怎么样的,这个东西很久已经研究过一下,后来又忘记了,今天又一次遇到了这个问题,所 ...

随机推荐

  1. 《javascript高级程序设计》第三章学习笔记

    Undefined类型 该类型只有一个值,即undefined. 对未初始化的变量和未定义的变量,用typeof检测,都会返回'undefined' Null类型 该类型只有一个值,null.并且从逻 ...

  2. GIT 配置管理

    git版本控制开发流程小结笔记(一) 收藏                                                                     何良瑞Nyanko君 ...

  3. iOS开发中的权限

    权限分类 联网权限 相册权限 相机.麦克风权限 定位权限 推送权限 通讯录权限 日历.备忘录权限 联网权限 引入头文件 @import CoreTelephony; 应用启动后,检测应用中是否有联网权 ...

  4. JSON字符串与JSON对象的区别

    Q:什么是"JSON字符串",什么是"JSON对象",两者的区别? a.JSON对象是直接可以使用JQuery操作的格式,如C#中可以用对象(类名)点出属性(方 ...

  5. 用BlazeMeter录制JMeter测试脚本

    工具: 1,JMeter 2,Chrome 3,BlazeMeter 4,SwitchyOmega(如果需要代理) 步骤: 以上工具准备好以后就可以录制JMeter的测试脚本了, 在Chrome中点击 ...

  6. Testlink与Redmine关联

    TestLink是一个开源的测试管理工具,它可以有效地管理整个测试流程(测试需求, 测试计划, 测试用例, 测试执行, 测试结果分析),但不能和开发流程统一起来,从而不能及时参与到开发中去,不能使项目 ...

  7. UDP server & client

    Server: import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; ...

  8. Rational Rose2007下载安装教程以及问题处理

    Rational Rose2007详细安装步骤 学习了UML,那么Rational rose画图软件当然就是必不可少的了.我的电脑是win7 64位的系统.下面的链接是安装软件以及破解方法.该软件是B ...

  9. Windows Phone 四、控件模版

    控件模版的概念 Windows Phone中每一个控件都有一个默认的模版,用于描述控件的内部组成结构和外观样式 相对于原本的样式外观操作,自定义模版的可自定义性更强 最基本的重写控件模版 <Gr ...

  10. 据库都有哪些锁 然后 Kill session

    当某个数据库用户在数据库中插入.更新.删除一个表的数据,或者增加一个表的主键时或者表的索引时,常常会出现ora-00054:resource busy and acquire with nowait ...