当前位置:首页 » 编程语言 » 用c语言做win32程序

用c语言做win32程序

发布时间: 2022-07-31 15:14:22

㈠ 用c语言编写WIN32程序用哪个编译器啊

一般都是用visual c++
也可以用Borland C++

㈡ 怎么用C语言编写一个windows窗口

  1. 调用window库窗口函数即可创建windows窗口。

  2. 必须使用windows的编译器,如VC,MS等等。

    RegisterClassEx函数:
    该函数注册在随后调用CreateWindow函数和CreateWindowEx函数中使用的窗口类。 RegisterClass函数己经由函数RegisterClassEx函数来代替,但是,如果不需要设置类的小目标则仍然可以使用RegisterClass函数。
    CreateWindowEx函数:
    该函数创建一个具有扩展风格的层叠式窗口、弹出式窗口或子窗口,其他与CreateWindow函数相同。关于创建窗口和其他参数的内容,请参看CreateWindow。具体仍可见微软的msdn。
    消息处理函数WindowProc:
    该函数是一个应用程序定义的函数。它处理发送给窗口的消息。WINDPROC类型定义了一个指向该回调函数的指针。WindowProc是用于应用程序定义函数的占位符。
    函数原型:
    LRESULT CALLBACK WindowProc (HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);
    参数:
    hwnd:指向窗口的句柄。
    uMsg:指定消息类型。
    wParam:指定其余的、消息特定的信息。该参数的内容与UMsg参数值有关。
    IParam:指定其余的、消息特定的信息。该参数的内容与uMsg参数值有关。
    返回值:返回值就是消息处理结果,它与发送的消息有关。

    一个简单的Window的代码如下:

    #include<Windows.h>
    #include<tchar.h>
    LRESULTWINAPIWinProc(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMlParam);
    intWinMain(
    __inHINSTANCEhInstance,
    __in_optHINSTANCEhPrevInstance,
    __inLPSTRlpCmdLine,
    __inintnShowCmd
    )
    {
    TCHAR*szName=_T("myWindow");
    WNDCLASSEXwc={0};
    HWNDhWnd=NULL;
    MSGMsg={0};
    wc.cbClsExtra=0;
    wc.cbWndExtra=0;
    wc.cbSize=sizeof(WNDCLASSEX);
    wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//通过函数来设置一个白色的背景,这里大家设置为NULL看看,会很有趣的
    wc.hCursor=NULL;//不设置
    wc.hIcon=NULL;//不设置
    wc.hIconSm=NULL;//不设置
    wc.hInstance=hInstance;//当前程序的句柄,hInstance是有系统给传递的
    wc.lpfnWndProc=WinProc;//窗口处理过程的回调函数。
    wc.lpszClassName=szName;//窗口类的名字。
    wc.lpszMenuName=NULL;
    wc.style=CS_HREDRAW|CS_VREDRAW;
    RegisterClassEx(&wc);//在系统中注册
    hWnd=CreateWindowEx(WS_EX_CLIENTEDGE,szName,_T("我的窗口我喜欢"),WS_OVERLAPPEDWINDOW,
    200,100,600,400,NULL,NULL,hInstance,NULL);//创建窗口,窗口标题为"我的窗口我喜欢"
    if(hWnd==NULL)
    {
    MessageBox(NULL,_T("There'sanError"),_T("ErrorTitle"),MB_ICONEXCLAMATION|MB_OK);
    return0;
    }
    ShowWindow(hWnd,nShowCmd);//显示窗口
    UpdateWindow(hWnd);
    //下面是对消息的循环处理,大家先不必管这些,下节课我会细说的
    while(GetMessage(&Msg,NULL,0,0))
    {
    TranslateMessage(&Msg);//翻译消息
    DispatchMessage(&Msg);//分派消息
    }
    returnMsg.message;
    }
    //消息处理函数
    LRESULTWINAPIWinProc(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMlParam)
    {
    switch(Msg)//处理消息过程
    {
    caseWM_DESTROY://响应鼠标单击关闭按钮事件
    PostQuitMessage(0);//退出消息队列
    return0;//退出函数
    }
    returnDefWindowProc(hWnd,Msg,wParam,lParam);
    }

㈢ 怎么用C语言编写WIN32的图形界面程序

用图形库呀,就是GRAPHIC.H那个,画一个窗口,不过好麻烦的

㈣ 用C语言编写Windows程序,不要DOS黑框

可以用C语言编写win32程序。带窗口的,没有dos的黑框。

搜索一下“win32编程".

㈤ 如何用C语言编写一个窗体应用程序

最好不要,稍微麻烦一点的窗体程序你就搞不定,而且资料非常少
比较合算的应该是C#的WPF, VC的MFC,都不是C语言的

㈥ 如何用C语言做一个windows应用程序窗口界面

  1. 可以使用CreateWindow函数。

    CreateWindow,Windows API宏, 在WinUser.h中根据是否已定义Unicode被分别定义为CreateWindowW和CreateWindowA,后两者又被分别定义为对CreateWindowExW和CreateWindowExA函数的调用。
    函数原型:
    HWND CreateWindow(
    LPCTSTR lpClassName,
    LPCTSTR lpWindowName,
    DWORD dwStyle,
    int x,
    int y,
    int nWidth,
    int nHeight,
    HWND hWndParent,
    HMENU hMenu,
    HANDLE hlnstance,
    LPVOID lpParam);
    参数:
    详情
    lpClassName
    指向一个空结束的字符串或整型数atom。如果该参数是一个整型量,它是由此前调用theGlobalAddAtom函数产生的全局量。这个小于0xC000的16位数必须是lpClassName参数字的低16位,该参数的高位必须是0。
    如果lpClassName是一个字符串,它指定了窗口的类名。这个类名可以是任何用函数RegisterClass注册的类名,或是任何预定义的控制类名。请看说明部分的列表。
    LPWindowName
    指向一个指定窗口名的空结束的字符串指针。
    如果窗口风格指定了标题条,由lpWindowName指向的窗口标题将显示在标题条上。当使用Createwindow函数来创建控制例如按钮,选择框和静态控制时,可使用lpWindowName来指定控制文本。
    dwStyle
    指定创建窗口的风格。该参数可以是下列窗口风格的组合再加上说明部分的控制风格。风格意义:
    WS_BORDER:创建一个带边框的窗口。
    WS_CAPTION:创建一个有标题框的窗口(包括WS_BORDER风格)。
    WS_CHILD:创建一个子窗口。这个风格不能与WS_POPUP风格合用。
    WS_CHILDWINDOW:与WS_CHILD相同。
    WS_CLIPCHILDREN:当在父窗口内绘图时,排除子窗口区域。在创建父窗口时使用这个风格。
    WS_CLIPSIBLINGS:排除子窗口之间的相对区域,也就是,当一个特定的窗口接收到WM_PAINT消息时,WS_CLIPSIBLINGS 风格将所有层叠窗口排除在绘图之外,只重绘指定的子窗口。如果未指定WS_CLIPSIBLINGS风格,并且子窗口是层叠的,则在重绘子窗口的客户区时,就会重绘邻近的子窗口。
    WS_DISABLED:创建一个初始状态为禁止的子窗口。一个禁止状态的窗口不能接受来自用户的输入信息。
    WS_DLGFRAME:创建一个带对话框边框风格的窗口。这种风格的窗口不能带标题条。
    WS_GROUP:指定一组控制的第一个控制。这个控制组由第一个控制和随后定义的控制组成,自第二个控制开始每个控制,具有WS_GROUP风格,每个组的第一个控制带有WS_TABSTOP风格,从而使用户可以在组间移动。用户随后可以使用光标在组内的控制间改变键盘焦点。
    WS_HSCROLL:创建一个有水平滚动条的窗口。
    WS_ICONIC:创建一个初始状态为最小化状态的窗口。与WS_MINIMIZE风格相同。
    WS_MAXIMIZE:创建一个初始状态为最大化状态的窗口。
    WS_MAXIMIZEBOX:创建一个具有最大化按钮的窗口。该风格不能与WS_EX_CONTEXTHELP风格同时出现,同时必须指定WS_SYSMENU风格。
    WS_OVERLAPPED:产生一个层叠的窗口。一个层叠的窗口有一个标题条和一个边框。与WS_TILED风格相同。
    WS_OVERLAPPEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXIMIZEBOX风格的层叠窗口,与WS_TILEDWINDOW风格相同。
    WS_POPUP:创建一个弹出式窗口。该风格不能与WS_CHILD风格同时使用。
    WS_POPUPWINDOW:创建一个具有WS_BORDER,WS_POPUP,WS_SYSMENU风格的窗口,WS_CAPTION和WS_POPUPWINDOW必须同时设定才能使窗口某单可见。
    WS_SIZEBOX:创建一个可调边框的窗口,与WS_THICKFRAME风格相同。
    WS_SYSMENU:创建一个在标题条上带有窗口菜单的窗口,必须同时设定WS_CAPTION风格。
    WS_TABSTOP:创建一个控制,这个控制在用户按下Tab键时可以获得键盘焦点。按下Tab键后使键盘焦点转移到下一具有WS_TABSTOP风格的控制。
    WS_THICKFRAME:创建一个具有可调边框的窗口,与WS_SIZEBOX风格相同。
    WS_TILED:产生一个层叠的窗口。一个层叠的窗口有一个标题和一个边框。与WS_OVERLAPPED风格相同。
    WS_TILEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU, WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXIMIZEBOX风格的层叠窗口。与WS_OVERLAPPEDWINDOW风格相同。
    WS_VISIBLE:创建一个初始状态为可见的窗口。
    WS_VSCROLL:创建一个有垂直滚动条的窗口。
    X
    指定窗口的初始水平位置。对一个层叠或弹出式窗口,X参数是屏幕坐标系的窗口的左上角的初始X坐标。对于子窗口,x是子窗口左上角相对父窗口客户区左上角的初始X坐标。如果该参数被设为CW_USEDEFAULT则系统为窗口选择缺省的左上角坐标并忽略Y参数。CW_USEDEFAULT只对层叠窗口有效,如果为弹出式窗口或子窗口设定,则X和y参数被设为零。
    Y
    指定窗口的初始垂直位置。对一个层叠或弹出式窗口,y参数是屏幕坐标系的窗口的左上角的初始y坐标。对于子窗口,y是子窗口左上角相对父窗口客户区左上角的初始y坐标。对于列表框,y是列表框客户区左上角相对父窗口客户区左上角的初始y坐标。如果层叠窗口是使用WS_VISIBLE风格位创建的并且X参数被设为CW_USEDEFAULT,则系统将忽略y参数。
    nWidth
    以设备单元指明窗口的宽度。对于层叠窗口,nWidth或是屏幕坐标的窗口宽度或是CW_USEDEFAULT。若nWidth是CW_USEDEFAULT,则系统为窗口选择一个缺省的高度和宽度:缺省宽度为从初始X坐标开始到屏幕的右边界,缺省高度为从初始Y坐标开始到目标区域的顶部。CW_USEDEFAULT只对层叠窗口有效;如果为弹出式窗口和子窗口设定CW_USEDEFAULT标志则nWidth和nHeight被设为零。
    nHeight
    以设备单元指明窗口的高度。对于层叠窗口,nHeight是屏幕坐标的窗口宽度。若nWidth被设为CW_USEDEFAULT,则系统忽略nHeight参数。
    hWndParent
    指向被创建窗口的父窗口或所有者窗口的句柄。若要创建一个子窗口或一个被属窗口,需提供一个有效的窗口句柄。这个参数对弹出式窗口是可选的。Windows NT 5.0;创建一个消息窗口,可以提供HWND_MESSAGE或提供一个己存在的消息窗口的句柄。
    hMenu
    菜单句柄,或依据窗口风格指明一个子窗口标识。对于层叠或弹出式窗口,hMenu指定窗口使用的菜单:如果使用了菜单类,则hMenu可以为NULL。对于子窗口,hMenu指定了该子窗口标识(一个整型量),一个对话框使用这个整型值将事件通知父类。应用程序确定子窗口标识,这个值对于相同父窗口的所有子窗口必须是唯一的。
    hlnstance
    与窗口相关联的模块实例的句柄。
    lpParam
    指向一个值的指针,该值传递给窗口WM_CREATE消息。该值通过在IParam参数中的CREATESTRUCT结构传递。如果应用程序调用CreateWindow创建一个MDI客户窗口,则lpParam必须指向一个CLIENTCREATESTRUCT结构。
    返回值:如果函数成功,返回值为新窗口的句柄:如果函数失败,返回值为NULL。若想获得更多错误信息,请调用GetLastError函数。

  2. 例程:

    //Window.cpp:.
    #include<windows.h>
    LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);


    intAPIENTRYWinMain(HINSTANCEhInstance,//应用程序的实例句柄,
    HINSTANCEhPrevInstance,
    LPSTRlpCmdLine,//命令行
    intnCmdShow)//显示方式
    {
    MSGmsg;
    HWNDhWnd;
    charszTitle[]="系统信息";//Thetitlebartext
    charszWindowClass[]="popMsg";//Thetitlebartext
    WNDCLASSEXwcex={0};
    wcex.cbSize=sizeof(WNDCLASSEX);//WNDCLASSEX结构体大小
    wcex.style=CS_HREDRAW|CS_VREDRAW;//位置改变时重绘
    wcex.lpfnWndProc=(WNDPROC)WndProc;//消息处理函数
    wcex.hInstance=0;//当前实例句柄
    wcex.hbrBackground=(HBRUSH)COLOR_WINDOWFRAME;//背景色
    wcex.lpszClassName=szWindowClass;//参窗口类名
    wcex.hIcon=0;//图标
    wcex.hCursor=LoadCursor(NULL,IDC_ARROW);//光标
    wcex.lpszMenuName=0;//菜单名称
    wcex.hIconSm=0;//最小化图标
    RegisterClassEx(&wcex);//注册窗口类

    hWnd=CreateWindow(szWindowClass,szTitle,WS_SYSMENU|WS_VISIBLE,//创建窗口
    CW_USEDEFAULT,CW_USEDEFAULT,400,300,NULL,NULL,0,NULL);
    if(!hWnd){
    returnFALSE;
    }

    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);

    while(GetMessage(&msg,NULL,0,0))//消息循环:
    {
    TranslateMessage(&msg);//转化虚拟按键到字符消息
    DispatchMessage(&msg);//分派消息调用回调函数
    }
    returnmsg.wParam;
    }

    LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)
    {
    PAINTSTRUCTps;
    HDChdc;
    RECTrect;
    switch(message)
    {
    caseWM_PAINT://重绘消息
    hdc=BeginPaint(hWnd,&ps);
    GetClientRect(hWnd,&rect);
    MoveToEx(hdc,10,10,0);
    SelectObject(hdc,::CreatePen(PS_SOLID,1,RGB(0xFF,0,0)));
    LineTo(hdc,100,200);
    //DrawText(hdc,szHello,strlen(szHello),&rt,DT_CENTER);
    EndPaint(hWnd,&ps);
    break;

    caseWM_CREATE:

    RegisterHotKey(hWnd,1,0,0x41);
    break;
    caseWM_HOTKEY:
    MessageBox(0,0,0,0);
    break;
    caseWM_TIMER:


    break;
    caseWM_DESTROY://窗口销毁消息
    PostQuitMessage(0);
    break;
    default:
    returnDefWindowProc(hWnd,message,wParam,lParam);
    }
    return0;
    }

㈦ c语言win32项目问题

不用MFC的win32项目(也就是纯API)建立对话框式的界面有两种方式
第一种:
CreateWindow创建主窗口后,纯粹用代码在主窗口上使用CreateWindow创建各种按钮、文本框等。
第二种:
创建一个Dialog资源(也就是最后一张图的那个),然后使用DialogBox加载这个Dialog

㈧ 怎么用c语言编写widows窗口程序

下面是我写的一个在windows窗体上显示树形图的程序。
你在vc6中新建win32工程(注意不是控制台)
然后新建c++源文件,粘贴代码进去,
编译运行即可。

#include <windows.h>
#include <math.h>
#define AD 3.14159265*45/180//相邻树枝的旋转角度
#define Gold 0.618//相邻树枝的长度比例 范围0-1
#define Len 100 //树根的长度
HDC hdc;
struct Node
{
double x;//节点坐标x
double y;//节点坐标y
double AM;//节点的左右分支的中线方向
double Length;//节点的原支长度
struct Node *LeftNode;//左分支
struct Node *RightNode;//右分支
};
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
void DL(double x1,double y1,double x2,double y2);
void DrawNode(struct Node *ThisNode);
void DrawTree (void);
//画一条直线
void DL(double x1,double y1,double x2,double y2)
{
MoveToEx (hdc, x1, y1, NULL) ;
LineTo (hdc, x2, y2) ;
}
void DrawNode(struct Node *ThisNode)
{
//左分支的地址、角度、长度、坐标
ThisNode->LeftNode=(struct Node *)malloc(sizeof(struct Node));
ThisNode->LeftNode->AM =ThisNode->AM +AD;
ThisNode->LeftNode->Length =ThisNode->Length *Gold;
ThisNode->LeftNode->x=ThisNode->x+cos(ThisNode->LeftNode->AM)*ThisNode->LeftNode->Length;
ThisNode->LeftNode->y=ThisNode->y+sin(ThisNode->LeftNode->AM)*ThisNode->LeftNode->Length;
//右分支的地址、角度、长度、坐标
ThisNode->RightNode=(struct Node *)malloc(sizeof(struct Node));
ThisNode->RightNode->AM =ThisNode->AM -AD;
ThisNode->RightNode->Length =ThisNode->Length *Gold;
ThisNode->RightNode->x=ThisNode->x+cos(ThisNode->RightNode->AM)*ThisNode->RightNode->Length;
ThisNode->RightNode->y=ThisNode->y+sin(ThisNode->RightNode->AM)*ThisNode->RightNode->Length;
//画图
DL(ThisNode->x,ThisNode->y,ThisNode->LeftNode->x,ThisNode->LeftNode->y);
DL(ThisNode->x,ThisNode->y,ThisNode->RightNode->x,ThisNode->RightNode->y);
//递归终点
if(ThisNode->Length>5 )
{
DrawNode(ThisNode->LeftNode);
DrawNode(ThisNode->RightNode);//
}
}
void DrawTree (void)
{
struct Node TreeRoot;
TreeRoot.x =500;//树根的横坐标
TreeRoot.y =Len;
TreeRoot.AM =3.14159265/2;
TreeRoot.Length =Len;
DrawNode(&TreeRoot);
}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("SineWave") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc= WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox ( NULL, TEXT ("Program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow ( szAppName, TEXT ("Sine Wave Using Polyline"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps ;
switch (message)
{
case WM_SIZE:
return 0 ;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
DrawTree();
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}

热点内容
c语言相反数 发布:2025-01-23 22:28:55 浏览:187
压缩网课 发布:2025-01-23 22:13:19 浏览:597
网站收录源码 发布:2025-01-23 22:04:42 浏览:693
用c语言制作 发布:2025-01-23 21:49:09 浏览:951
怎么删除开机密码电脑 发布:2025-01-23 21:47:24 浏览:891
php配置伪静态 发布:2025-01-23 21:31:46 浏览:764
mud源码下载 发布:2025-01-23 21:19:46 浏览:137
反恐精英15游戏服务器ip 发布:2025-01-23 21:13:38 浏览:853
起床的战争玩什么服务器 发布:2025-01-23 21:03:06 浏览:145
企业级安卓手机防毒软件哪个好 发布:2025-01-23 20:59:28 浏览:243