界面demo-画一个无标题栏无边框的窗口

问题描述

画一个无标题栏无边框的窗口
窗口是用gdi+画的
打算是想实现一种想安全卫士之类的窗口 没有默认的标题栏和边框的
现在的情况是 按钮被挡住了 画不出来?

代码:

// WinCreate.cpp : Defines the entry point for the application.

//

#include

#include //初始化一下com口

#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#include ""GdiPlus.h""
using namespace Gdiplus;
#pragma comment(libgdiplus.lib"")
#endif
#include

//用于接收应用程序实例句柄
HINSTANCE g_hInstance = 0;
GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_pGdiToken;

void OnCreate(HWND hWnd)
{
CreateWindowEx( 0BUTTON""OK""
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_OWNERDRAW
}
//窗口处理函数(用于处理消息)
LRESULT CALLBACK WndProc(HWND hWndUINT nMsg
WPARAM wParam LPARAM lParam)
{

switch(nMsg)
{

case WM_CREATE:
{
GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_pGdiToken;
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(&m_pGdiToken &m_gdiplusStartupInput NULL);
BLENDFUNCTION m_Blend;
HDC m_hdcMemory;
//初始化GDI+.
m_Blend.BlendOp=0;
m_Blend.BlendFlags=0;
m_Blend.AlphaFormat=1;
m_Blend.SourceConstantAlpha=255;

//窗体样式为0x80000为层级窗体
DWORD dwExStyle=GetWindowLong(hWndGWL_EXSTYLE);
SetWindowLong(hWndGWL_EXSTYLEdwExStyle|0x80000);

//绘制内存位图
HDC hdcTemp=GetDC(hWnd);
m_hdcMemory=CreateCompatibleDC(hdcTemp);
HBITMAP hBitMap=CreateCompatibleBitmap(hdcTemp417128);
SelectObject(m_hdcMemoryhBitMap);

//使用GDI+载入PNG图片
HDC hdcScreen=::GetDC (hWnd);
RECT rct={00};
::GetWindowRect(hWnd&rct);
POINT ptWinPos={rct.leftrct.top};
Graphics graph(m_hdcMemory);
Image image(L""2.png""TRUE);
graph.DrawImage(&image00417128);

//使用UpdateLayerWindow进行窗口透明处理
HMODULE hFuncInst=LoadLibrary(""User32.DLL"");
typedef BOOL (WINAPI MYFUNC)(HWNDHDCPOINTSIZE*HDCPOINT*COLORREFBLENDFUNCTION*DWORD);
MYFUNC UpdateLayeredWindow;
UpdateLayeredWindow=(MYFUNC)GetProcAddress(hFuncInstUpdateLayeredWindow"");
SIZE sizeWindow={417128};
POINT ptSrc={00};
UpdateLayeredWindow( hWndhdcScreen&ptWinPos&sizeWindowm_hdcMemory&ptSrc0&m_Blend2);
LONG nOldStyle = ::GetWindowLong (hWnd GWL_STYLE);
::SetWindowLong (hWnd GWL_STYLE nOldStyle & ~WS_CAPTION);
::SetWindowPos (hWnd HWND_TOPMOST 100100 417128 SWP_SHOWWINDOW);

DeleteObject(m_hdcMemory);
DeleteObject(hBitMap);
}
break;

case WM_DESTROY:
GdiplusShutdown(m_pGdiToken);
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd nMsg wParam lParam);
}
//注册窗口类
BOOL Register(LPSTR lpClassName WNDPROC wndProc)
{
WNDCLASSEX wce = {0};
wce.cbSize = sizeof(wce);
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hIconSm = NULL;
wce.hInstance = g_hInstance;
wce.lpfnWndProc = wndProc;
wce.lpszClassName = lpClassName;
wce.lpszMenuName = NULL;
wce.style = CS_HREDRAW | CS_VREDRAW;
ATOM nAtom = RegisterClassEx(&wce);
if(nAtom == 0)
return FALSE;
return TRUE;
}
//创建主窗口
HWND CreateMain(LPSTR lpClassName LPSTR lpWndName)
{
HWND hWnd = CreateWindowEx(0lpClassNamelpWndName
WS_OVERLAPPEDWINDOWCW_USEDEFAULT
CW_USEDEFAULTCW_USEDEFAULTCW_USEDEFAULT
NULLNULLg_hInstanceNULL);

return hWnd;
}
//显示窗口
void Display(HWND hWnd)
{
ShowWindow(hWndSW_SHOW);
UpdateWindow(hWnd);
}
//消息循环
void Message()
{
MSG nMsg = {0};
while(GetMessage(&nMsgNULL00))
{
TranslateMessage(&nMsg);
DispatchMessage(&nMsg);
}
}
int APIENTRY WinMain(HINSTANCE hInstance
HINSTANCE hPrevInstance
LPSTR lpCmdLine
int nCmdShow)
{
g_hInstance = hInstance;
if(!Register(""Main""WndProc))
{
MessageBox(NULLRegister Fail""Infor""MB_OK);
return 0;
}
HWND hWnd = CreateMain(""Main""window"");

Display(hWnd);
Message();

return 0;
}

时间: 2024-11-03 03:19:50

界面demo-画一个无标题栏无边框的窗口的相关文章

图片-求助:请问无标题栏有边框的窗体怎么多出一部分白色的出来了呢?

问题描述 求助:请问无标题栏有边框的窗体怎么多出一部分白色的出来了呢? 我想做一个去掉标题栏但不去掉边框的窗体(不是FormBorderStyle=None),但在Win 10里面标题栏却出现了一部分白色的背景,请问有没有高手知道是怎么回事?

OA界面上添加一个股票走势图

问题描述 [img=http://q.stock.sohu.com/cn/600665/index.shtml][/img]公司系统是金蝶的OA想在首页添加一个公司股票走势图,本来想的是跳转到相应的股票界面,但是发现会把那整个页面都显示出来,但是领导又不想看到其它多余的界面,只想看走势图,如何在我们公司OA界面上添加一个股票走势图这样的窗口?? 解决方案 解决方案二:找一个能提供股票走势图数据的WebService,然后OA调用WebService取到数据后,在主页上显示股票走势图

使用急求解答!C++和MFC画一个界面,调试时界面虽然出现,但是无反应

问题描述 使用急求解答!C++和MFC画一个界面,调试时界面虽然出现,但是无反应 小弟使用C++,用MFC画出了一个界面,使用VS中的"生成"显示生成成功,但是使用"调试"按钮时,我用MFC所画的界面虽然出来了,但是上面的所有按钮点击都没反应,界面也是完全卡死的状态,我在初始化部分打了断点,发现逐步运行时,运行到只能显示反汇编的,然后再运行几下,就发现显示无法在运行中调试.VS中的"模块"界面显示第一个还能加载符号,第二个就不行了,这是什么问题呢

C# 移动窗口 适用于有标题栏和无标题栏窗体 超级简单版

适用于有标题栏和无标题栏窗体,适用于窗体内控件,当然 Form 也不例外,只要能添加 MouseDown.MouseMove 事件,无需添加 MouseUp 事件,也无需考虑 Form 是否有标题栏. 本方法采用 Control.MousePosition,而没有采用 MouseEventArgs e 获取数据,是因为这样无需考虑窗体有无标题栏和边框的大小,也无需考虑是窗体引发事件,还是窗体内控件引发事件.     代码 // 获取窗体的屏幕坐标和鼠标光标的位置(屏幕坐标) private vo

Win8系统Metro界面IE10.0体验 无Flash无网银

苹果在IOS上不支持Flash,但是Mac电脑上的Safari还是支持的.而尽管微软已经提过Metro界面下的IE 10不支持插件,但这一天真正到来的时候,无flash无网银等等,还是会让我们觉得有些不方便. ▲Metro界面中的IE10不支持插件 不支持插件也许可以避免一些系统反应慢或者崩溃的情况,但目前使用Metro版IE10浏览视频网站是个障碍,由于目前国内支持HTML 5的视频网站并不多,多数时候传统版IE 10可以浏览,Metro版会提示安装插件,但等你真正安装的时候,会发现根本装不上

delphi程序全屏显示无标题栏覆盖整个屏幕

delphi 简单实现程序全屏显示无标题栏,覆盖整个屏幕,这个在做工控机或屏保时有用的,具体代码如下,感兴趣的朋友可以参考下哈   delphi 程序全屏显示无标题栏,覆盖整个屏幕,这个在做工控机或屏保时有用的,所以记下 复制代码 代码如下: procedure TMainFrm.FormCreate(Sender: TObject); begin with MainFrm do begin { Position form } Top := 0 ; Left := 0 ; { Go full s

线程-一个完全无锁无原子的疑问,以及猜想?

问题描述 一个完全无锁无原子的疑问,以及猜想? 先基于一个单生产单消费的情况,我写了如下一个class:templateclass SingleLockFree{public:SingleLockFree(){m_tail = new Node();m_Head = m_tail;}~SingleLockFree(){ //做最后未处理的内存的释放}void Push(T t)//生产线程{Node* p = new Node();//内存分配待优化m_tail->_data = t;m_tai

编程-汇编把一个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数

问题描述 汇编把一个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数 汇编把一个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数.转换算法可以是:用二进制数除以10000,商为"万位",再用余数除以1000,得到"千位":依次用余数除以100.10和1,得到"百位"."十位"和"个位" 解决方案 unsigned int ui;//(16位无符号二进制数) unsigned

Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式的解释)

原文:Android中实现全屏.无标题栏的两种办法(另附Android系统自带样式的解释) 在进行UI设计时,我们经常需要将屏幕设置成无标题栏或者全屏.要实现起来也非常简单,主要有两种方法:配置xml文件和编写代码设置. 1.在xml文件中进行配置 在项目的清单文件AndroidManifest.xml中,找到需要全屏或设置成无标题栏的Activity,在该Activity进行如下配置即可. 实现全屏效果: android:theme="@android:style/Theme.NoTitleB