用C语言编写windows窗体程序,怎么创建按钮以及怎么添加按钮的触发事件啊

用C语言编写windows窗体程序,怎么创建按钮以及怎么添加按钮的触发事件啊,第1张

Windows

窗体程序是基于消息机制的,所有控件,它的本质都是一个窗体,都是使用

CreateWindows

函数来创建,不过类名,则需要指定为系统预先注册的控件类,比如,你要创建一个按钮控件,就要这样子

CreateWindows(

"BUTTON",

"按钮标题"

),CreateWindows

这个函数你应该用了不少了吧,其余的参数可以参考

MSDN,但是类名我们指定了

“BUTTON”,说明我们要创建一个按钮,每个按钮都有一个唯一的

ID,通过你的消息处理函数,可以知道哪个按钮发生了什么事件,详细讲的话,非常多,你可以参考

MSDN,或者《Windows

程序设计》这本书

一:NET中窗体应用程序就是一种GUI程序

窗体创建的两种方式:

(1)自动生成的是:

[csharp] view plain copy print

ApplicationRun(new Form1());

相当于:

[csharp] view plain copy print

Form1 f = new Form1();

ApplicationRun(f);

(2)显示新的窗体

[csharp] view plain copy print

Form2 f = new Form2( );

fShow();

二;事件

Windows 系统中处处是事件:

鼠标按下

鼠标释放

键盘键按下……

Windows 通过随时响应用户触发的事件做出相应的响应——事件驱动机制

WinForms 应用程序也是事件驱动的

开发人员针对感兴趣的事件,编写相应的事件处理程序

编写事件处理程序::::

1、选中控件

2、在“属性”窗口中单击“闪电”图标

3、找到要处理的事件

4、生成事件处理方法

5、编写处理代码

例:随鼠标移动,显示鼠标当前坐标

点击选中窗体

属性窗体中找到MouseMove事件

双击事件生成事件处理程序框架

编写代码

[csharp] view plain copy print

private void Form1_MouseMove(object sender, MouseEventArgs e)

{

thisText = stringFormat("鼠标位置({0},{1})", eX, eY);

}

运行图;

常用窗体事件

Load :窗体加载事件(即将显示尚未显示),常用作初始化功能

Click事件:鼠标单击事件

DoubleClick事件:鼠标双击事件

MouseMove :鼠标移动事件

KeyDown :键盘按下事件

KeyUp :键盘释放事件

小例子:单击窗体计1分,双击窗体计10分,编写程序,随时显示得分总数。

定义变量n存储分数,初值为0

单击事件click中n+1,并刷新

双击事件DoubleClick中n+10,并刷新

在窗体上设置单击

[csharp] view plain copy print

private void Form1_MouseClick(object sender, MouseEventArgs e)

{

n += 1;

string s = stringFormat("得分{0}", n);

thisText = s;

}

运行如下:

双击如下;

[csharp] view plain copy print

private void Form1_MouseDoubleClick(object sender, MouseEventArgs e)

{

n += 10;

string s = stringFormat("得分{0}", n);

thisText = s;

}

运行图;

这个还有点缺陷,双击本该是23,但却成啦24,双击时记上的单击的那下

(2)菜单控件

创建菜单的步骤:

1、切换设计器

2、工具箱→所有 Windows 窗体

3、向窗体添加 MenuStrip 控件

4、设置菜单的属性和事件

设计学生管理菜单,注意菜单分隔条的设计

实现“退出”功能

关闭窗体,调用窗体类的Close方法

关闭当前窗体 thisClose( );

[csharp] view plain copy print

private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)

{

thisClose();

}

修改文件programcs,照以下的文件改下:

///

///

应用程序的主入口点。

///

[stathread]

static

void

main()

{

applicationenablevisualstyles();

applicationsetcompatibletextrenderingdefault(false);

applicationrun(new

新窗体的类名);

}

具体如下 :

新建一个对话框资源,比如Dlg;在OnButton()响应函数下。

在窗口托一个button。

给button加一个单击响应函数  OnButton()。

Windows下选择原生态的SDK(看《windows程序设计》),或者开发效率更高的MFC(运行效率低一点、也比较庞杂),或者WTL。Duilib可以结合后两者使用。

跨平台的解决方案就多了。Qt自不用说。从linux上过来的GTK+、wx(这两者我未接触过)也可以。比较小众的还有FLTK、SDL(做多媒体程序、游戏比较适合)、SFML等等。

就是建一个工程:

打开VC++,执行“文件”——“新建”命令,单击“Win32 Console Application”选项后,在“工程”文本框中输入“prog10_1”,在“位置”中选择“c:\programming”后,“位置”文本框中即显示“c:\programming\prog10_1”选择“创建新工作区”选项,单击“确定”按钮后,在选择“An empty project”选项,即建立了一个工程。

添加源程序:

执行“工程”——'添加工程"命令,在file中选择prog10_1cpp,并以同样方式选择prog10_1_2cpp和prog10_1_3cpp后,就将三个源文件全部添加到了工程中。在左侧窗口中单击"File view"选项卡,再单击"Source File",此时双击某个源文件名,在右侧窗口中即显示相应的源程序。

生产窗体可以使用CreateWindowEx函数。

函数功能:该函数创建一个具有扩展风格的层叠式窗口、d出式窗口或子窗口,其他与CreateWindow函数相同。

函数原型:

CreateWindowEx函数创建一个层叠的,自动d出的(pop-up)或是一个子窗口通过扩展格式。另外这个函数的作用与CreateWindow函数的作用相同。要获得更多的关于创建窗口的信息和关于CreateWindowEx函数参数的详细描述。参见CreateWindow

HWND CreateWindowEx(

DWOR DdwExStyle,        //窗口的扩展风格

LPCTSTR lpClassName,    //指向注册类名的指针

LPCTSTR lpWindowName,   //指向窗口名称的指针

DWORD dwStyle,          //窗口风格

int x,                  //窗口的水平位置

int y,                  //窗口的垂直位置

int nWidth,             //窗口的宽度

int nHeight,            //窗口的高度

HWND hWndParent,        //父窗口的句柄

HMENU hMenu,            //菜单的句柄或是子窗口的标识符

HINSTANCE hInstance,    //应用程序实例的句柄

LPVOID lpParam          //指向窗口的创建数据

);

例程:

include<windowsh>

#include<stdioh>

LRESULT CALLBACK WinDouProc(

    HWND hwnd,      // handle to window

    UINT uMsg,      // message identifier

    WPARAM wParam,  // first message parameter

    LPARAM lParam   // second message parameter

);

class CWnd

{

public:

     CWnd()

     {

          m_hWnd = NULL;

     }

     BOOL CreateEx(

          DWORD dwExStyle,      // extended window style

          LPCTSTR lpClassName,  // pointer to registered class name

          LPCTSTR lpWindowName, // pointer to window name

          DWORD dwStyle,        // window style

          int x,                // horizontal position of window

          int y,                // vertical position of window

          int nWidth,           // window width

          int nHeight,          // window height

          HWND hWndParent,      // handle to parent or owner window

         HMENU hMenu,          // handle to menu or child-window identifier

         HANDLE hInstance,     // handle to application instance

         LPVOID lpParam        // pointer to window-creation data

     );

     BOOL ShowWindow( int nCmdShow );

     BOOL UpdateWindow();

public:

     HWND m_hWnd;

};

BOOL CWnd::CreateEx(

      DWORD dwExStyle,      // extended window style

      LPCTSTR lpClassName,  // pointer to registered class name

      LPCTSTR lpWindowName, // pointer to window name

      DWORD dwStyle,        // window style

      int x,                // horizontal position of window

      int y,                // vertical position of window

      int nWidth,           // window width

      int nHeight,          // window height

      HWND hWndParent,      // handle to parent or owner window

      HMENU hMenu,          // handle to menu or child-window identifier

      HANDLE hInstance,     // handle to application instance

      LPVOID lpParam        // pointer to window-creation data

)

{

     m_hWnd = ::CreateWindowEx  (dwExStyle,lpClassName,lpWindowName,dwStyle,x,y,nWidth,nHeight,hWndParent,hMenu,(HINSTANCE)hInstance,lpParam);

     if(m_hWnd != NULL)

          return TRUE;

     else

         return FALSE;

}

BOOL CWnd::ShowWindow(int nCmdShow)

{

     return ::ShowWindow(m_hWnd,nCmdShow);

}

BOOL CWnd::UpdateWindow()

{

     return ::UpdateWindow(m_hWnd);

}

int WINAPI WinMain(

  HINSTANCE hInstance,  // handle to current instance

  HINSTANCE hPrevInstance,  // handle to previous instance

  LPSTR lpCmdLine,      // pointer to command line

  int nCmdShow          // show state of window

)

{

    WNDCLASS wndclass;     //先设计窗口类

    wndclasscbClsExtra = 0;

    wndclasscbWndExtra = 0;

    wndclasshbrBackground = (HBRUSH)GetStockObject(DKGRAY_BRUSH);

    wndclasshCursor = LoadCursor(NULL,IDC_HELP);

    wndclasshIcon = LoadIcon(NULL,IDI_WARNING);

    wndclasshInstance = hInstance;

    wndclasslpfnWndProc = WinDouProc;

    wndclasslpszClassName = "Magic_Maggie";

    wndclasslpszMenuName = 0;

    wndclassstyle = CS_VREDRAW | CS_HREDRAW;

     //某一个变量原油几个变量去掉一个特征,可以用取反(~)后再进行与(&)

     //例如:style上去掉CS_NOCLOSE,可以style&~CS_NOCLOSE;

    RegisterClass(&wndclass);     ///注意先建立再注册昂

    CWnd wnd;

     wndCreateEx(NULL,"Magic_Maggie","DouDou",WS_OVERLAPPEDWINDOW,0,0,800,600,NULL,NULL,hInstance,NULL);

     wndShowWindow(SW_SHOWNORMAL);

     wndUpdateWindow();

     MSG msg;     //消息循环

     while(GetMessage(&msg,NULL,0,0))

    {

           TranslateMessage(&msg);

           DispatchMessage(&msg);   //触发WinDouProc

     }

    return 0;

}

 

 

LRESULT CALLBACK WinDouProc(

    HWND hwnd,      // handle to window

     UINT uMsg,      // message identifier

    WPARAM wParam,  // first message parameter

    LPARAM lParam   // second message parameter

)

{

 switch(uMsg)

 {

 case WM_LBUTTONDOWN:

      MessageBox(hwnd,"您按下了鼠标左键昂","豆豆的程序",MB_OK);

      HDC hdc;

      hdc = GetDC(hwnd);    

     //The GetDC function retrieves a handle to a display device context for the client area of a specified window or for the entire screen You can use the returned handle in subsequent GDI functions to draw in the device context

      TextOut(hdc,0,0,"感谢您对豆豆程序的支持昂",strlen("感谢您对豆豆程序的支持昂"));

      ReleaseDC(hwnd,hdc);

      break;

 

case WM_CHAR:

      char szChar[20];

      sprintf(szChar,"Char is %d",wParam);

      MessageBox(hwnd,szChar,"豆豆的程序",MB_OK);

      break;

 

case WM_PAINT:

      PAINTSTRUCT ps;

      HDC hDc;

      hDc = BeginPaint(hwnd,&ps);

      TextOut(hDc,0,0,"这个是重绘滴哦",strlen("这个是重绘滴哦"));

      EndPaint(hwnd,&ps);

      break;

 

case WM_CLOSE:   //这个case与下边的destroy这个case不要弄错了,否则窗口不出现,但任务管理器中运行

      if(IDYES == MessageBox(hwnd,"您真的要退出么","豆豆的程序",MB_YESNO))

      {

           DestroyWindow(hwnd);

      }

      break;

 

case WM_DESTROY:

      PostQuitMessage(0);

      //////////////////////////////////////////

      break;

 

default:

     return DefWindowProc(hwnd,uMsg,wParam,lParam);  // 别忘记了return

 

  }

 return 0;

}

定义一个Timer,设置timer的Interval属性为1000毫秒,启用timer。在timer的tick事件中加入

 private void timer1_Tick(object sender, EventArgs e)

        {

            Random r = new Random();

            thisBackColor = ColorFromArgb(255, rNext(256), rNext(256), rNext(256));

        }

窗体背景每隔1秒会随机变换一种颜色

以上就是关于用C语言编写windows窗体程序,怎么创建按钮以及怎么添加按钮的触发事件啊全部的内容,包括:用C语言编写windows窗体程序,怎么创建按钮以及怎么添加按钮的触发事件啊、c#窗体程序设计中clientsize怎样使用、如何用c sharp语言编写九九乘法表的窗体应用程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9496230.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存