c怎么实现窗体拖放图标

c怎么实现窗体拖放图标,第1张

你说的这种实际上就是如何巧旁做使应用程序具有可接收拖动 *** 作的问题

就是让应用程序可接收 WM_DROPFILES 消息

实现方法 如下

生成窗体时使用 CreateWindowEx

dwExStyle 属性中 加上 WS_EX_ACCEPTFILES

或者

窗体生成以后

DragAcceptFiles(hWnd, true)

也可以

窗体已经可以接收 WM_DROPFILES

处理 WM_DROPFILES 消息

case WM_DROPFILES:

{//当文件拖进来时启埋

TCHAR szBuf[ MAX_PATH ]

DragQueryFile((HDROP)wParam, 0, szBuf, MAX_PATH-1)//如果多个文件被拖拽的情况只取孝衡最后一个文件

WinExec(szBuf, SW_SHOWNORMAL)//如果是exe文件就打开执行了

DragFinish((HDROP)wParam)

}

MFC添加 WM_DROPFILES消息映射 就可以了

至于将图标保留在窗体里,那就是从应用程序中提取图标

保存信息了,网上有很多,不细说了

1>新建windows应用程序

2>选中新建的窗体,设置其相应属性:

(1)。将 FormBorderStyle 属性设置为 None。

(2)。将窗体的 BackgroundImage 属性设置为先前创建的位图文件。不必将文件添加到项目系统中;这将在指定该文件作为背景图像时自动完成。

(3)。将 TransparencyKey 属性设置为位图文件的背景色,本例中为黄色。(此属性告诉应用程序窗体中的哪些部分需要设置为透明。 )

这时你就可以按F5测试你的程序,可以看到如图所示的窗体。现在窗体还不能拖动,只能通过结束程序,或者alt+F4关闭。下面我们编写相应的代码来实现标题栏的相应功能。

3.编写窗体相关代码好首

(要实现窗口的关闭,移动等 *** 作)

(1)。实现窗口关闭

从工具栏中拖进一个按钮,设置其按钮文字为“×”,设置其大小为合适大小。双击该按钮进入其明旅触发时间函数。

写入如下代码:

this.Close()        //关闭本窗体

(2)。设置窗体的移动 *** 作,我们要用到两个全局的变量

private Point mouseOffset        //记录鼠标指针的坐标

private bool isMouseDown = false //记录鼠标按键是否按下

创建该窗体 MouseDown事件的相应处理程序。

private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

{

int xOffset

int yOffset

if (e.Button == MouseButtons.Left)

{

xOffset = -e.X - SystemInformation.FrameBorderSize.Width

yOffset = -e.Y - SystemInformation.CaptionHeight -

SystemInformation.FrameBorderSize.Height

mouseOffset = new Point(xOffset, yOffset)

isMouseDown = true

}

}

创建该窗体的 MouseMove事件的相应处理程序

private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)

{

if (isMouseDown)

{

Point mousePos = Control.MousePosition

mousePos.Offset(mouseOffset.X, mouseOffset.Y)

Location = mousePos

}

}

创建该窗体的MouseUp事件的相应处理程序

private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)

{

// 修改鼠标状态isMouseDown的值

// 确保只有鼠标左键按下并移动时,才移动窗体

if (e.Button == MouseButtons.Left)

{

isMouseDown = false

}

}

(3)。加入相应的其他的控件

其他的就是看你自己的需要,来添加控件,实现自己想要实现的功能。本例中添加了一文本框,设置其背景为黄色,所以显示时也成了透明的。别忘了把事件绑定到窗体 !!!

现在,我们就可以生成程序,看友槐数一下最后的效果了。

//调用api函数创建窗口

//示例:

#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM)//窗口过程函数

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

{

static TCHAR szAppName[] = TEXT("MyWindows")//定义窗口类名

HWND hwnd//窗口句柄

MSG msg//

WNDCLASS wndclass //窗口类

wndclass.style = CS_HREDRAW | CS_VREDRAW//指定窗口类型,各种“类风格”(详见下方↓)可以使用按位或 *** 作符组合起来

wndclass.lpfnWndProc = WndProc//指定窗口过程(必须是回调函数)

wndclass.cbClsExtra = 0//预留的额外空间,一般为 0

wndclass.cbWndExtra = 0//预留的额外空间,一般为 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("这个程序需要在 Windows NT 才能执行!"), szAppName, MB_ICONERROR)

return 0

}

hwnd = CreateWindow(szAppName,      //创建窗口

TEXT("windows"),

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)//回调函数

{

HDC hdc

PAINTSTRUCT ps

RECT rect

switch (message)

{

case WM_PAINT:

hdc = BeginPaint(hwnd, &ps)

GetClientRect(hwnd, &rect)

DrawText(hdc, TEXT("第一个C语言窗口程序缺中!"), -1, &rect,

DT_SINGLELINE | DT_CENTER | DT_VCENTER)

EndPaint(hwnd, &ps)

return 0

case WM_DESTROY:

PostQuitMessage(0)

return 0

}

return DefWindowProc(hwnd, message, wParam, lParam)

}


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

原文地址: http://outofmemory.cn/yw/12296851.html

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

发表评论

登录后才能评论

评论列表(0条)

保存