澳门新蒲京娱乐

图片 3
复制命令
新蒲京官方下载 4
人生苦短,一封来自

Windows程序设计,C语言编程学习

  刚开端读书Windows程序设计,磕磕碰碰,先做个小笔记缓缓神经,首倘若将MessageBox这几个Windows
API函数的。

C语言是面向进度的,而C++是面向对象的

  MessageBox函数是无数人刚早先攻读Windows程序设计依旧是Windows
API碰着的率先个放置函数,这些函数使用的艺术是:

C和C++的区别:

  MessageBox(NULL, TEXT(“弹出框内容”),
TEXT(“标题”), MB_OK);

C是一个结构化语言,它的显要在于算法和数据结构。C程序的筹划重点考虑的是怎么着通过三个历程,对输入进行演算处理获得输出控制)。

  初次之外,它还有多少个姐妹:

C++,主要考虑的是哪些组织贰个指标模型,让这些模型可以契合与之相应的难题域,那样就足以因此取得对象的情况消息获得输出或落到实处进度序控制制。
所以C与C++的最大分别在于它们的用来缓解难点的思维方法不平等。之所以说C++比C更先进,是因为“
设计这些概念已经被融入到C++之中 ”。

  MessageBoxA(NULL, “弹出框内容”,
“标题”, MB_OK);   // TEXT可有可无

C与C++的最大分别:在于它们的用来缓解难点的盘算艺术不平等。之所以说C++比C更上进,是因为“
设计这么些概念已经被融入到C++之中
”,而就语言自个儿而言,在C中越多的是算法的概念。那么是还是不是C就不重庆大学了,错!算法是先后设计的功底,好的统一筹划若是没有好的算法,一样越发。而且,“C加上好的宏图”也能写出分外好的事物。

  MessageBoxW(NULL, L””, L””, MB_OK);  
                    // 那几个L用来代表Unicode,不得以简简单单

图片 1

  其实之所以有这七个是因为微软必要满意Windows
98之后对汉字等其他语言编码的急需,那种要求通过Unicode完成,可是微软本意不是要大家选用Unicode来编制程序,而是经过行使“通用”方式,也正是MessageBox();函数,完成差异的编码首要依旧经过IDE集成开发条件下改变差别的编码格局。回到MessageBox();,前天可比高烧的是,怎么在MessageBox();中落到实处变量的打字与印刷呢?

上次大家说了什么是windows编制程序?领悟到Windows API
编制程序、Windows编制程序、Windows SDK 编制程序是贰个定义。

  就如C语言中不时使用printf函数,这么些函数挺有趣的,应为函数输入的参数是尚未限定个数的,约等于是随机改变的。例如:

前几天大家接纳C语言来落成您的首先个实在的Windows程序。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main(){
 5
 6     int x=100, y=200, z=300;    
 7     
 8     printf("%d %d %d.\n", x, y, z);
 9     system("pause");
10     return 0;
11 }

windows.h 头文件介绍:

 

编辑Windows程序,首先要含有 windows.h 头文件。windows.h
还富含了别的部分Windows头文件,例如:

  这几个printf函数不仅能够行使多个参数打字与印刷,还能用来直接打字与印刷变量,不过MessageBox却不能够一向打字与印刷,那个引起本身的直接思考。笔者先想到的是确立三个缓冲区,利用那几个缓冲区取打字与印刷字符数量。当然打字与印刷的函数得使用sprintf了

windef.h:基本类型定义

  

winbase.h:内核函数

 1 int main(){
 2     
 3     int a = 12;
 4     char szBuffer[100];             // 使用一个字符数组来做缓冲区
 5 
 6     sprintf(szBuffer, "helloworld %d.\n", a);
 7     _snprintf(szBuffer, 100, "helloworld %d.\n", a);
 8         // 使用_snprintf函数比较安全,因为可以输入限定字符的个数  
 9 
10     printf("%s.\n", szBuffer);
11     puts(szBuffer);                            // 可以使用printf中的%s将szBuffer打印出来,或者用puts直接输出
12     //printf("helloworld.\n");
13 
14     system("pause");
15     return 0;
16 }

wingdi.h:用户接口函数

 

winuser.h: 图形设备接口函数

  那些缓冲区的格局借使用在MessageBox函数里面,就足以兑现打字与印刷变量的方法,比如以下代码:

这个头文件定义了Windows的全体数据类型、函数原型、数据结构和符号常量,约等于说,全数的Windows
API都在那个头文件中注解。

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){
    int a = 12;

    TCHAR szBuffer[100];                  // 通用版本
    _stprintf(szBuffer, TEXT("hello 通用 %d"), a);
    MessageBox(NULL, szBuffer, TEXT("通用"), MB_OK  | MB_ICONINFORMATION);

    return 0;
}

在C语言中,程序都以“黑屏”的,称为控制台程序(Console
Application)。那套教程要讲的是带界面包车型大巴Windows程序(Windows
Application),也号称GUI程序(GUI Application)。

 

控制台程序以 main() 为入口函数,Windows程序以 WinMain()
为入口函数,动态链接库以 DllMain()
为入口函数,分歧的入口函数决定了不一样门类的主次。

  可是每便都写个缓冲区来存放,并且一不下心忘记行使_snprintf函数,那就GG了,很只怕产生缓冲区溢出的生死存亡。由此,那里运用printf原先函数设计的规律,我们也来陈设二个MessageBoxPrintf();函数,用这几个函数来促成格式化输出的功能,要实现这几个函数,首先得参考printf();函数的落实原理。

WinMain() 函数的原型为:

int my_printf(const char * szFormat, ...){

    int iReturn;
    va_list pArgs;

    va_start(pArgs, szFormat);
    iReturn = vprintf(szFormat, pArgs);
    va_end(pArgs);

    return iReturn;
}


int main(){

    int x=100, y=200, z=300;

    printf("hello %d, %d, %d.\n", x, y, z);        
    my_printf("test_my_printf,哈哈%d %d.\n", x, y);

    system("pause");
    return 0;
}

int WINAPI WinMain(

 

HINSTANCE hInstance, // 当前窗口句柄

  …表示的趣味是流传的参数是可变参数个数的,va_start(pArgs,
szFormat);表示指向szFormat之后的二个参数,那几个函数的广大事物笔者明天也还没驾驭过来,之后再来补充,不过以往仿效那一个函数大家得以自个儿写个Message博克斯Printf();函数,具体代码如下:

HINSTANCE hPrevInstance, //
前两个窗口句柄,Win32下为NULL(Win16留下的废料,近年来已弃用)

// 自己做一个格式化的messageboxprintf对话框
int CDECL MessageBoxPrintf(TCHAR * szCaption, TCHAR * szFormat, ...){

    TCHAR szBuffer[1024];
    va_list pArglist;

    va_start(pArglist, szFormat);
    _vsnprintf(szBuffer, sizeof(szBuffer)/sizeof(TCHAR), szFormat, pArglist);
    va_end(pArglist);

    return MessageBox(NULL, szBuffer, szCaption, MB_OK | MB_ICONINFORMATION);
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){

    int x=100, y=200, z=300;
    int cxScreen, cyScreen;

    cxScreen = GetSystemMetrics(SM_CXSCREEN);
    cyScreen = GetSystemMetrics(SM_CYSCREEN);

    // MessageBoxW(NULL, L"helloworld", L"biaoti", MB_OK);
    // MessageBoxA(NULL, TEXT("helloworld"), TEXT("biaoti"), MB_OK);
    MessageBoxPrintf(TEXT("我的标题"), TEXT("hello %d %d %d"), x, y, z);    // 把这个函数做好后,直接就可以输出
    MessageBoxPrintf(TEXT("我的屏幕大小"), TEXT("我的屏幕宽度是:%d.\n高度是:%d.\n"), cxScreen, cyScreen);


    return 0;
}

LPST奥迪Q7 lpCmdLine, // 命令行参数

  相当于自身规划出来七个好像printf的小工具,因为微软真的并未设计MessageBox中展开格式化输出的函数。

int nCmdShow // 窗口呈现格局

);

先不用打草惊蛇掌握这个参数的含义,笔者先给我们写1个归纳的不带黑屏的、真正的Windows程序:

#include

int WINAPI WinMain(

HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow

){

// 调用API 函数MessageBox

int nSelect = MessageBox(NULL, TEXT, TEXT(), MB_OKCANCEL);

if(nSelect == IDOK){

Message博克斯(NULL, TEXT(“你点击了“显著”按钮”), TEXT, MB_OK);

}else{

MessageBox(NULL, TEXT(“你点击了“废除”按钮”), TEXT, MB_OK);

}

return 0;

}

运营结果:

图片 2

点击“分明”或“撤废”按钮,又会弹出2个新的提醒框。我们能够亲自运维一下,会有忠实的体验。

原先没有main()函数,没有#include 的C语言程序也是能够运营的!

MessageBox()
函数是不可胜举API中的2个,用于弹出三个点名风格的对话框,其原型为:

int WINAPI MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption,
UINT uType );

WINAPI 为宏定义

#define WINAPI
__stdcall,表示函数调用情势,一时可以不理睬,不影响代码编写,只须求理解MessageBox()再次回到值为
int,表示按下的按钮。

参数表明

相关文章

No Comments, Be The First!
近期评论
    功能
    网站地图xml地图