RT
程序有一个主窗口A,然后再创建一个窗口B,然后设置 A是B的父窗口,此时 B就显示在A的范围里了,此时看起来和 MDI窗口差不多...(窗口 A和B 都是用 CreateWindowEx 来创建的)但是如下情况不一样:
我用另一个 窗口C 来遮住 A和B,然后我点击 B的标题栏激活B,此时B是激活了,但是 A和B 还是在 窗口C 的后面... 如果是MDI窗口的话,A和B 是会跑到窗口C的前面来的...请问,我不想用MDI窗口,又想实现我要的效果,如何做啊???
请教大家 ~~ 感谢。
PS:我的代码放于1楼...
程序有一个主窗口A,然后再创建一个窗口B,然后设置 A是B的父窗口,此时 B就显示在A的范围里了,此时看起来和 MDI窗口差不多...(窗口 A和B 都是用 CreateWindowEx 来创建的)但是如下情况不一样:
我用另一个 窗口C 来遮住 A和B,然后我点击 B的标题栏激活B,此时B是激活了,但是 A和B 还是在 窗口C 的后面... 如果是MDI窗口的话,A和B 是会跑到窗口C的前面来的...请问,我不想用MDI窗口,又想实现我要的效果,如何做啊???
请教大家 ~~ 感谢。
PS:我的代码放于1楼...
解决方案 »
- 请教贴:MFC/VC/C/C++本质有什么不同
- 求助:有WritePrivateProfileString 可以向 ini 写一个字符串,如果想写一个整数,那么怎么办?谢谢!
- 怎么用VC 的ODBC方式在ACCESS中保存图片和读取图片(急!!!!!!!!!!!在线急等
- 怎样创建象MessageBox这样的窗口???????
- 寻找EMAIL文件标准的文档。
- 请给我推荐Com方面的书
- 关于流媒体和vc++的结合,高人请进!!
- vc中的延时语句是什么?忘了
- VC++ 多个线程操作一个链表会出现什么问题??
- VC++初学:对话框上的一组单选按钮,怎么选定其中的一个?
- SkinSharp 谁知道 怎么改 DLL的路径?
- CListCtrl排序问题
#include <windows.h>LRESULT CALLBACK ProcWindow(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
void QuitWindow();HINSTANCE g_hInstance = 0;
HWND g_hWnd = 0;HWND g_hWnd1 = 0;//////////// //////////// //////////// //////////// //////////// ////////////int WINAPI WinMain(
HINSTANCE _hInstance, // 当前 hInstance句柄
HINSTANCE _hPrevInstance, // 之前的 hInstance句柄
LPSTR _lpCmdLine, // 命令行
int _nCmdShow // 显示状态
)
{
g_hInstance = _hInstance;// 程序(.exe)的图标貌似默认是 资源文件中 的第一个图标??
WNDCLASS wndcls = {0};
wndcls.style = CS_HREDRAW | CS_VREDRAW;
wndcls.lpfnWndProc = ProcWindow;
wndcls.cbClsExtra = 0;
wndcls.cbWndExtra = 0;
wndcls.hInstance = _hInstance;
wndcls.hIcon = LoadIcon(NULL, IDI_ERROR); // 窗口图标
wndcls.hCursor = LoadCursor(NULL, IDC_CROSS);
wndcls.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH); // 背景画刷
wndcls.lpszMenuName = NULL;
wndcls.lpszClassName= "Test123";
// 注册窗口类
RegisterClass(&wndcls); g_hWnd = CreateWindowEx(
NULL, //WS_EX_CLIENTEDGE,
wndcls.lpszClassName,
"ZC Window",
WS_OVERLAPPEDWINDOW,
100, 100,
800, 600,
NULL,
NULL, //g_hMenu,
_hInstance,
NULL); ShowWindow(g_hWnd, SW_SHOWNORMAL);
UpdateWindow(g_hWnd); g_hWnd1 = CreateWindowEx(
NULL, //WS_EX_CLIENTEDGE,
wndcls.lpszClassName,
"ZC Window",
WS_OVERLAPPEDWINDOW,
100, 100,
400, 300,
NULL,
NULL, //g_hMenu,
_hInstance,
NULL); ShowWindow(g_hWnd1, SW_SHOWNORMAL);
UpdateWindow(g_hWnd1); SetParent(g_hWnd1, g_hWnd); MSG msg;
while(GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
}LRESULT CALLBACK ProcWindow(
HWND _hWnd, // 窗口句柄
UINT _uMsg, // 消息ID(identifier)
WPARAM _wParam,
LPARAM _lParam)
{
switch (_uMsg)
{
case WM_PAINT:
{
HDC hDc;
PAINTSTRUCT ps;
hDc = BeginPaint(_hWnd, &ps);
TextOut(hDc, 0, 0, "ASDFG zxcvb", strlen("ASDFG zxcvb"));
EndPaint(_hWnd, &ps);
return 0;
// break;
}
case WM_DESTROY:
{
QuitWindow();
return 0;
}
}
return DefWindowProc(_hWnd, _uMsg, _wParam, _lParam);
}void QuitWindow()
{
DestroyWindow(g_hWnd);
PostQuitMessage(0);
}
再说我说的 窗口C 是随便一个窗口啊,类似 文件夹,任务管理器 什么的...
我做过这样的:C遮住 A和B时,鼠标点击激活B,
此时 ,由B激活A,A再激活B,然后B又激活A,A又激活B....循环了...
HWND hWnd,
HWND hWndInsertAfter,
int X,
int Y,
int cx,
int cy,
UINT uFlags
);
激活了那个窗口,那个窗口就置顶。。HWND_TOPMOST