iCmdShow应该怎么设置?

lxb365 2005-10-25 07:00:39
书上说“iCmdShow是一个整型数据,标记了程序最初的显示状态。
为SW_SHOWNORAML的时候为一般大小显示方式。
为SW_SHOWMAXIMIZED的时候为最大化显示方式。
为SW_SHOWMINNOACTIVE的时候程序将显示在任务栏上。”

可是WinMain函数直接用的就是iCmdShow,
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow)

那么iCmdShow要在哪里设置呢?比如我要以最小化的方式显示程序,该怎么办?
...全文
210 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
kenskens 2005-10-25
  • 打赏
  • 举报
回复
iCmdShow是系统通过WinMain传递进来的,你可以更改,比如最小化:
iCmdShow = SW_MINIMIZE;
ShowWindow(hwnd, iCmdShow);
用windows api 做的贪吃蛇 #include #include"resource.h" #include"Node.h" #include #include TCHAR szAppname[] = TEXT("Snack_eat"); #define SIDE (x_Client/80) #define x_Client 800 #define y_Client 800 #define X_MAX 800-20-SIDE //点x的范围 #define Y_MAX 800-60-SIDE //点y的范围 #define TIME_ID 1 #define SECOND 100 #define NUM_POINT 10 //点的总个数 #define ADD_SCORE 10 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hwnd; //窗口句柄 MSG msg; //消息 WNDCLASS wndclass; //窗口类 HACCEL hAccel;//加速键句柄 wndclass.style = CS_HREDRAW | CS_VREDRAW; //窗口的水平和垂直尺寸被改变时,窗口被重绘 wndclass.lpfnWndProc = WndProc; //窗口过程为WndProc函数 wndclass.cbClsExtra = 0; //预留额外空间 wndclass.cbWndExtra = 0; //预留额外空间 wndclass.hInstance = hInstance; //应用程序的实例句柄,WinMain的第一个参数 wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //设置图标 wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); //载入预定义的鼠标指针 wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //设置画刷 wndclass.lpszMenuName = szAppname; //设置菜单 wndclass.lpszClassName = szAppname; //设置窗口类的名字 if (!RegisterClass(&wndclass))//注册窗口类 { MessageBox(NULL, TEXT("这个程序需要windows NT!"), szAppname, MB_ICONERROR); return 0; } hwnd = CreateWindow(szAppname, TEXT("Snack_eat"),//CreateWindow函数调用时,WndProc将受到WM_CREATE WS_OVERLAPPEDWINDOW&~WS_THICKFRAME& ~WS_MAXIMIZEBOX,//普通的层叠窗口&禁止改变大小&禁止最大化 CW_USEDEFAULT, //初始x坐标(默认) CW_USEDEFAULT, //初始y坐标 x_Client, //初始x方向尺寸 770 y_Client, //初始y方向尺寸 750 NULL, //父窗口句柄 NULL, //窗口菜单句柄 hInstance, //程序实例句柄 WinMain函数中第二个参数 NULL); //创建参数 ShowWindow(hwnd, iCmdShow);//显示窗口,iCmdShow是WinMain的第四个参数,决定窗口在屏幕中的初始化显示形式,例:SW_SHOWNORMAL表示正常显示 UpdateWindow(hwnd);//使窗口客户区重绘,通过向WndProc发送一条WM_PAINT消息而完成的 hAccel = LoadAccelerators(hInstance, szAppname);//加载加速键 while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(hwnd, hAccel, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } }/* while (GetMessage(&msg, NULL, 0, 0))//GetMessage函数从消息队列中得到消息,填充msg。如果msg.message等于WM_QUIT,返回0,否则返回非0 { TranslateMessage(&msg);//将msg返回给windows已进行某些键盘消息的转换 DispatchMessage(&msg);//将msg再次返回给windows }*/ return msg.wParam;//msg.wParam是PostQuitMessage函数的参数值,通常是0 } ...
第一节板书: 1、MingW就是一个C/C++的编译器。 编译器和编辑器:编译器其实就是把源代码编译成目标代码的程序;Tc就是一个编辑器:能在里边敲代码,高亮显示,自动提示。 2、 C-Free里边可以运行、也可以调试。设置断点很简单,就是在要设置断点的代码行前边点击一下鼠标,有了一个红色小点就说明设置好了断点。 3、控制台程序的入口是main,Win32程序的入口是WinMain 4、以前用TuborC的同学会问“什么叫工程?”。在以前大家用TurboC写的程序一般也就是一个文件,但是用C语言写大程序的时候不可能把所有的代码都写在一个文件中,肯定要写很多文件。“工程(Project)”就是这些问题的一个集合。)在“工程名”中写入你为这个工程取的名字,最好有一定意义。 5、Windows程序的骨干代码: #include int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { return 0 ; } 6、 向Windows的世界问好 (1)MessageBox(NULL,TEXT("世界你好"),TEXT("问好"),MB_OK); 第一个参数暂时不讲;第二个是正文;第三个是标题(Caption);第四个是类型。 MB_OK就是表示有一个OK按钮【确定】) TEXT是一个宏,当字符串中有中文的时候最好用TEXT来包围这个字符串,虽然不使用TEXT在VC6中没问题,但是在VC7中有问题,而且微软也建议使用TEXT宏,因此在涉及到中文的场合要使用它。他的作用就是把中文转化成不会乱码的格式。(暂时这么认为)。_T("问好"),其实_T只是TEXT的一个缩写而已。而且_T在有的低版本里不识别。TEXT()低版本也识别。 换个样子: MessageBox(NULL, TEXT("世界你好"), TEXT("你好"),MB_OKCANCEL); 可从设置希望在对话框中显示的按钮: #define MB_OK 0x00000000L #define MB_OKCANCEL 0x00000001L #define MB_ABORTRETRYIGNORE 0x00000002L #define MB_YESNOCANCEL 0x00000003L #define MB_YESNO 0x00000004L #define MB_RETRYCANCEL 0x00000005L 也可以设置对话框中显示的图标: #define MB_ICONHAND 0x00000010L #define MB_ICONQUESTION 0x00000020L #define MB_ICONEXCLAMATION 0x00000030L #define MB_ICONASTERISK 0x00000040L 比如:MessageBox(NULL, TEXT("世界你好") ,TEXT("你好"), MB_ICONQUESTION); (2)可是如果我想显示“确定、取消”按钮的时候同时使用问号图标呢? MessageBox(NULL, TEXT("世界你好"), TEXT("你好"),MB_OKCANCEL| MB_ICONQUESTION); MessageBox(NULL, TEXT("世界你好"), TEXT("你好"), MB_ABORTRETRYIGNORE | define MB_ICONEXCLAMATION); (3)思考: 到这一步如果你只是在背诵“第一组和第二组中间放一个竖线就可以实现两种效果的组合形式”,那么你未来只会成为一个代码工人。我们要思考一下其背后的原理。 首先说“|”是什么意思?“|”是位运算里的“或”运算,只有对应的两个二进位有一位为1时,结果位才为1 ,否则为0。MB_OK、MB_OKCANCEL等的低四位不同,但是高位永远为0;MB_ICONHAND、MB_ICONQUESTION等的低5至第8位不同,而其他位永远为0。这样“MB_OK、MB_OKCANCEL”组的数值与“MB_ICONHAND、MB_ICONQUESTION”组的数值进行或运算后能分别保留各自的部分,也就是在结果值中同时体现两组的取值。 拿到1000010以后怎么判断是不是和0000010或运算来的? 1000010 0000010 与& ====== 0000010 1000011 0000010 & ======= 000

16,551

社区成员

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

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

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