
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc,hd;
RECT rc;
TCHAR tx[]=L"Hello,VS2005";
HWND hw;
switch (message)
{
case WM_COMMAND:
break;
case WM_CREATE:
SetTimer(hWnd,1,1000,NULL);
break;
case WM_TIMER:
hw=GetForegroundWindow();
if(hw)
{
hd=GetDC(hw);
TextOut(hd,10,10,tx,_tcslen(tx));
ReleaseDC(hw,hd);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
KillTimer(hWnd,1);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
//GetForegroundWindow有时不灵光
//仅仅尝试了下TextOut,有了DC,画图其实一样。
包含图标的窗口实际上是DesktopWindow的一个字窗口。确切地讲,Desktop Window包含一个无标题的、类名为“SHELLDLL_DefView”的子窗口,这个字窗口又包含一个无标题的、类名为“SysListView32”的子窗口——这才是那个真正包含桌面图标的窗口。 // HWN[VC++]如何得到桌面窗口的句柄(桌面图标)
建立工程的时候,你可以选择mfc工程,或者 win32 application工程,这都是可视化程序。
你直接根据向导的提示一直下一步就可以了。创建好后直接build就可以生成程序了,它有基础框架的,基本代码直接写好了,一出生就是一个可以运行的程序,甚至不需要你写一个字母,但这个程序什么都没有,就仅仅是一个对话框或者一个干干净净的窗口,连个字估计都没有。至于这个程序怎么正确地添加代码才能实现更多的功能,就要你去多钻研了,从console程序到windows可视化界面的程序是需要一个转变过程的。你初看这个图形界面的代码你可能会疯掉,耐心研究研究就好了,找几本windows程序设计的书看看,再写几个程序练练就好了。我从第一次接触图形界面到可以自己写图形界面程序大概花了半年,没人可以请教,全靠看书和上网查资料。图形界面的程序的编写思路是完全不同的。你慢慢练吧!
你这样吧,你运行VC++的时候那个窗口是全屏的话,你就按下ALT+ENTER键,然后这个时候就是窗口模式了,然后你再点左上角的"控制按钮",然后会d出一个菜单,你就选择"属性",这个时候就会d出一个对话框选择"选项"这个选项卡,你会看到有一个"显示选项"里面有"窗口"和"全屏显示"你选择"窗口",然后点确定,这个时候它会问你是一直保存吗还是当前保存,你就选择第二个"保存属性,供以后具有相同标题的窗口使用"然后再点确定你再看看以后还会不会出现全屏的现象
建立mfc工程然后实现您要的功能
步骤:
1、
new 选择project选项卡
2、
选择MFC AppWizard (exe) 填写相关信息点击确定就可以了
点击运行,就可以出现图形界面了,打开窗口设计文件可以添加控件到上面之类的。
算了吧!
#pragma comment(linker,"/SUBSYSTEM:Windows /ENTRY:mainCRTStartup")#include <windowsh>
/ 使类名成为全局变量 /
TCHAR szClassName[ ] = TEXT("WindowsApp");
/ 这个函数由Windows内部函数DispatchMessage()调用 /
LRESULT CALLBACK WindowProcedure (HWND hWnd, UINT message, WPARAM wParam,LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
switch (message) / 处理信息 /
{
case WM_DESTROY:
PostQuitMessage (0); / 发送WM_QUIT到消息队列 /
break;
case WM_PAINT:
hdc = BeginPaint (hWnd, &ps) ;
GetClientRect (hWnd, &rect) ;
DrawText (hdc, TEXT("Hello, Windows NT!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
EndPaint (hWnd, &ps) ;
break ;
default: / 不处理的消息 /
return DefWindowProc (hWnd, message, wParam, lParam);
}
return 0;
}
/ 下面是主函数 /
int main ( void )
{
HINSTANCE hThisInstance = GetModuleHandle(NULL) ;
int nFunsterStil = SW_SHOW ;
HWND hWnd; / 这是窗口的句柄 /
MSG messages;/ 应用程序的消息保存在这里 /
WNDCLASSEX wincl;/ 窗口类的数据结构 /
/ 窗口结构 /
winclhInstance = hThisInstance;
wincllpszClassName = szClassName;
wincllpfnWndProc = WindowProcedure;/ 这个函数由Windows *** 作系统调用 /
winclstyle = CS_DBLCLKS; / 获取双击指令 /
winclcbSize = sizeof (WNDCLASSEX);
/ 使用默认图标和鼠标指针 /
winclhIcon = LoadIcon (NULL, IDI_APPLICATION);
winclhIconSm = LoadIcon (NULL, IDI_APPLICATION);
winclhCursor = LoadCursor (NULL, IDC_ARROW);
wincllpszMenuName = NULL; / 没有菜单 /
winclcbClsExtra = 0;/ 窗口类后面没有多余的字节 /
winclcbWndExtra = 0;/ 结构或者窗口实例 /
/ 使用窗口的默认颜色作为窗口的背景色 /
winclhbrBackground = (HBRUSH) COLOR_BACKGROUND;
/ 注册窗口类。如果注册失败,那么就退出程序 /
if (!RegisterClassEx (&wincl))
return 0;
/ 窗口类已被注册。创建它的程序 /
hWnd = CreateWindowEx (
0,
szClassName, / 类名 /
TEXT("Windows App"), / 窗口标题栏的文字 /
WS_OVERLAPPEDWINDOW, / 默认窗口 /
CW_USEDEFAULT, / 窗口左上角的位置 /
CW_USEDEFAULT, / 窗口右下角的位置 /
544, / 窗口宽度(以“像素”位单位) /
375, / 窗口高度(以“像素”位单位) /
HWND_DESKTOP,/ 窗口是桌面的子窗口 /
NULL,/ 该窗口无菜单 /
hThisInstance, / 程序实例的句柄 /
NULL / 没有窗口创建的数据 /
);
/ 显示窗口 /
ShowWindow (hWnd, nFunsterStil);
/ 重绘窗口 /
UpdateWindow(hWnd);
/ 运行消息循环。循环到GetMessage()函数返回0 /
while (GetMessage (&messages, NULL, 0, 0))
{
/ 把虚拟信息翻译成字符信息 /
TranslateMessage(&messages);
/ 发送信息到窗口过程 /
DispatchMessage(&messages);
}
/ 返回PostQuitMessage()函数的返回值 /
return messageswParam;
}
以上就是关于如何获取桌面最上层的窗口vc windows编程全部的内容,包括:如何获取桌面最上层的窗口vc windows编程、[VC++]如何得到桌面窗口的句柄(桌面图标)、VC++中如何在一个空白的工程中建立一个可视化的窗口等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)