获得多个同名顶层窗口的句柄

以记事本作为测试。从开始菜单启动记事本6次,记事本标题应该都是"无标题 - 记事本"

新建Win32 Application工程(Hello World!)里加入如下代码:

BOOL CALLBACK lpEnumFunc(HWND hwnd,LPARAM strTarget) //添加回调函数

{

char strTitle[128],strOutput[128];

GetWindowText(hwnd,strTitle,128);

if(strcmp(strTitle,(char*)strTarget)==0)

{

wsprintf(strOutput,"句柄:0x%x",hwnd);

MessageBox(NULL,strOutput,strTitle,NULL);

}

return TRUE;

};





LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

int wmId, wmEvent;

PAINTSTRUCT ps;

HDC hdc;

TCHAR szHello[MAX_LOADSTRING];

LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

char *strTarget;



switch (message) 

{

case WM_COMMAND:

wmId    = LOWORD(wParam); 

wmEvent = HIWORD(wParam); 

// Parse the menu selections:

switch (wmId)

{

case IDM_ABOUT:

  //DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);

  strTarget="无标题 - 记事本";

  EnumWindows(lpEnumFunc,(LPARAM)strTarget);

  break;

case IDM_EXIT:

  DestroyWindow(hWnd);

  break;

default:

  return DefWindowProc(hWnd, message, wParam, lParam);

}

break;

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

// TODO: Add any drawing code here...

RECT rt;

GetClientRect(hWnd, &rt);

DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);

EndPaint(hWnd, &ps);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

   }

   return 0;

}

................................................
则点击菜单的关于时,程序采用对话框提示了6遍同名记事本窗口句柄,如图


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值