就是让应用程序可接收 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)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)