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. 原生JS事件绑定方法以及jQuery绑定事件方法bind、live、on、delegate的区别

    一.原生JS事件绑定方法: 1.通过HTML属性进行事件处理函数的绑定如: <a href="#" onclick="f()"> 2.通过JavaS ...

  2. 在Update表数据同时将数据备份

    分享一条有意思的SQL语句,也是前两天有个朋友在面试的时候碰到的,他当时没有做出来,回来之后问我, 如何在同一条语句中实现,更新表的时候同时备份更新前的记录数据. --在修改数据前,先要把修改前的数据 ...

  3. Quartz2D 编程指南(二)变换、图案、阴影

    概览 图形上下文 路径 颜色与颜色空间 变换 图案 阴影 渐变 透明层 Quartz 2D 中的数据管理 位图与图像遮罩 CoreGraphics 绘制 Layer 5.变换 简介 Quartz 2D ...

  4. QT 调试时出现 During startup program exited with code 0xc0000135 错误

    我用的QT creator 5.70 出现上述原因是动态库加载不成功,但是QTcreator 不会提示什么动态库,具体缺乏什么动态库要用VS新建一个工程调用才可以看到,这也是QT Creator很大的 ...

  5. 利用paramiko模块实现堡垒机+审计功能

    paramiko模块是一个远程连接服务器,全真模拟ssh2协议的python模块,借助paramiko源码包中的demos目录下:demo.py和interactive.py两个模块实现简单的堡垒机+ ...

  6. AppScan漏洞“已解密的登陆请求”修复解决方案

    最近在修复系统漏洞时,使用新版AppScan扫描IIS站点(WebForm)出现一个严重漏洞“已解密的登陆请求”. 扫描工具修复的建议为在登陆界面不使用含“password”类型的控件或加密录入参数. ...

  7. 实时控制软件设计第一周作业-汽车ABS软件系统案例分析

    汽车ABS软件系统案例分析 ABS 通过控制作用于车轮制动分泵上的制动管路压力,使汽车在紧急刹车时车轮不会抱死,这样就能使汽车在紧急制动时仍能保持较好的方向稳定性. ABS系统一般是在普通制动系统基础 ...

  8. magereverse - Magento数据库表结构

    Magento数据库表结构相当复杂,250多张表包含了非常多的表关联关系,让刚刚接触Magento的开发者来说真的非常头疼.往往是看到一个产品的各种属性分散在非常多的表中,找不到任何办法来取出它们的数 ...

  9. python 调用封装好的模块

    有些时候,我们写了些通用的模块,想调用的时候,该怎么操作呢? 以下是我写的一个简单的登录作为例子: 在cla.py中定义了一个Login_gues.pyt(带参数的实例):在cc.py下调用这个; 1 ...

  10. express 的 app.get和app.use

    1.若调用app.get()时只有一个参数,则认为是取设置值,否则认为是注册路由 2.所有被 app.use() 接收的 handle 会被放到一个 stack 里边 app.get() 执行的时候会 ...