求助!关于用API创建无边框窗口的问题

blues_ 2011-08-02 08:24:29
以下是我的代码:
#include <windows.h>
#include <stdio.h>

LRESULT CALLBACK WndProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);



int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{

WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_ARROW);
wndcls.hIcon=LoadIcon(NULL,NULL);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WndProc;
wndcls.lpszClassName="XPoptimize";
wndcls.lpszMenuName=NULL;
wndcls.style=NULL;
RegisterClass(&wndcls);

RECT WndRect;
WndRect.left=0;WndRect.top=0;
WndRect.right=650;WndRect.bottom=500;
AdjustWindowRectEx(&WndRect,0,false,NULL);

HWND hwnd=CreateWindow("XPoptimize",NULL,0,0,0,WndRect.right-WndRect.left,WndRect.bottom-WndRect.top,NULL,NULL,hInstance,NULL);
SetWindowLong(hwnd,GWL_STYLE,WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_POPUP);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}


LRESULT CALLBACK WndProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{

switch(uMsg)
{
case WM_DESTROY:
PostQuitMessage(NULL);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}

return 0;
}

这样是可以创建出一个无边框窗口来,可是效果不稳定,当我调用SetWindowPos改变它的位置时,边框就会显出边框来.
右建单击它在任务栏里的托盘边框也会显出来。
该怎样解决?
或有更好的方法创建无边框窗口吗?

求高手回答!
...全文
711 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
blink31 2012-01-05
  • 打赏
  • 举报
回复
学习了! 谢谢!!
healer_kx 2011-08-03
  • 打赏
  • 举报
回复
用Spy++看看,是不是还有Boder一类的属性。
至善者善之敌 2011-08-03
  • 打赏
  • 举报
回复
看看这样可以吗
DWORD dwStyle = GetStyle();//获取旧样式
DWORD dwNewStyle = WS_OVERLAPPED | WS_VISIBLE| WS_SYSMENU |WS_MINIMIZEBOX
|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
dwNewStyle&=dwStyle;//按位与将旧样式去掉
SetWindowLong(m_hWnd,GWL_STYLE,dwNewStyle);//设置成新的样式
DWORD dwExStyle = GetExStyle();//获取旧扩展样式
DWORD dwNewExStyle = WS_EX_LEFT |WS_EX_LTRREADING |WS_EX_RIGHTSCROLLBAR;
dwNewExStyle&=dwExStyle;//按位与将旧扩展样式去掉
SetWindowLong(m_hWnd,GWL_EXSTYLE,dwNewExStyle);//设置新的扩展样式
//告诉windows:我的样式改变了,窗口位置和大小保持原来不变!
SetWindowPos(NULL,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED);
moheng1 2011-08-03
  • 打赏
  • 举报
回复
win32的没弄过,
直接建一个mfc对话框然后border属性设为none不行吗
W170532934 2011-08-02
  • 打赏
  • 举报
回复
是不是该考虑重载OnPaint,OnDraw函数呢???

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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