菜鸟请教MFC问题,简单到不行,可是菜鸟不会,麻烦指点

louzilc 2012-03-04 04:34:21
这是我的一个新学的课程mfc,一节课什么都没有讲直接让做三个窗口。要求第一个窗口没有系统菜单(就是右键后出来的那个菜单),第二个窗口,去掉最小化,然后右键能够发送一个messagebox。怎么改正都没有成功。我一个初学者,查那些函数,都不知道怎么查。看了,仿照着也做了,可是还是不成功,总有些问题。请各位指点一下吧。
代码如下:

#include <windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE PreInstance,LPSTR lpCmdLine,int nCmdShow)
{
HWND hwnd1;
HWND hwnd2;
HWND hwnd3;
MSG msg;

char lpszClassName1[]="窗口 1";
WNDCLASS wc1;
wc1.style&=~WS_SYSMENU;
wc1.lpfnWndProc=WndProc;
wc1.cbClsExtra=0;
wc1.cbWndExtra=0;
wc1.hInstance=hInstance;
wc1.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc1.hCursor=LoadCursor(NULL,IDC_ARROW);
wc1.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc1.lpszMenuName=NULL;
wc1.lpszClassName=lpszClassName1;



RegisterClass(&wc1);


char lpszClassName2[]="窗口 2";
WNDCLASS wc2;
wc2.style =0;
wc2.lpfnWndProc=WndProc;
wc2.cbClsExtra=0;
wc2.cbWndExtra=0;
wc2.hInstance=hInstance;
wc2.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc2.hCursor=LoadCursor(NULL,IDC_ARROW);
wc2.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);
wc2.lpszMenuName=NULL;
wc2.lpszClassName=lpszClassName2;



RegisterClass(&wc2);



hwnd1=CreateWindow(lpszClassName1,"Windows1",WS_OVERLAPPEDWINDOW,120,50,700,500,NULL,NULL,hInstance,NULL);
hwnd2=CreateWindow(lpszClassName2,"Windows2",WS_OVERLAPPEDWINDOW,150,80,750,550,NULL,NULL,hInstance,NULL);
hwnd3=CreateWindow(lpszClassName1,"Windows3",WS_OVERLAPPEDWINDOW,200,130,500,300,NULL,NULL,hInstance,NULL);


ShowWindow(hwnd1,nCmdShow);
UpdateWindow(hwnd1);

ShowWindow(hwnd2,nCmdShow);
UpdateWindow(hwnd2);


ShowWindow(hwnd3,nCmdShow);
UpdateWindow(hwnd3);


while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;

}



LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_LBUTTONDOWN:
MessageBeep(0);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
...全文
81 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mlinlin 2012-03-05
  • 打赏
  • 举报
回复
这个是Windows应用程序,自己创建窗口的,可以说是让学的人先明白窗体的创建及一些消息响应机制,菜单的话你得自己创建,之后添加一个鼠标右键消息即可,百度一下这种代码很多(VC鼠标右键弹出菜单),窗口最小化,你在创建窗口的时候设置它的样式
向立天 2012-03-05
  • 打赏
  • 举报
回复
你的前两个要求都是可以通过修改窗口风格来实现的
我觉得可以做三个程序吧
修改这个位置
wc1.style&=~WS_SYSMENU;

可以查查MSDN有关WS_SYSMENU这类宏的使用
louzilc 2012-03-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]

CreateWindow之后加上这段代码即可
C/C++ code

LONG nStyle = GetWindowLong(hwnd1, GWL_STYLE);
nStyle &= ~WS_SYSMENU;
SetWindowLong(hwnd1, GWL_STYLE, nStyle);

nStyle = GetWindowLong(hwnd2, ……
[/Quote]


加了后,并不是显示三个窗口了。只有窗口2了
louzilc 2012-03-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bujanbusan 的回复:]

对啊 MFC简单再属性里设置就好了 sdk就麻烦了
[/Quote]

那么对于SDK具体要在哪儿块儿做呢?
louzilc 2012-03-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wltg2001 的回复:]

你上面的代码不是MFC啊,是SDK好不好!要真是MFC的话,在对话框资源属性里面修改就行了
[/Quote]


昨天才接触这门课。那么对于sdk直接修改呢?
土土 2012-03-04
  • 打赏
  • 举报
回复
对啊 MFC简单再属性里设置就好了 sdk就麻烦了
wltg2001 2012-03-04
  • 打赏
  • 举报
回复
你上面的代码不是MFC啊,是SDK好不好!要真是MFC的话,在对话框资源属性里面修改就行了
Eleven 2012-03-04
  • 打赏
  • 举报
回复
CreateWindow之后加上这段代码即可

LONG nStyle = GetWindowLong(hwnd1, GWL_STYLE);
nStyle &= ~WS_SYSMENU;
SetWindowLong(hwnd1, GWL_STYLE, nStyle);

nStyle = GetWindowLong(hwnd2, GWL_STYLE);
nStyle &= ~WS_MINIMIZEBOX;
SetWindowLong(hwnd2, GWL_STYLE, nStyle);
louzilc 2012-03-04
  • 打赏
  • 举报
回复
没有人回答下么?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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