我有一个类似于弹出窗口或菜单的控件.我想显示它,当用户点击框的边界外时,让它隐藏起来.我已经使用了Mouse.Capture(这个,CaptureMode.SubTree)以及在OnLostMouseCapture中以与Menu/Popup相同的方式重新获取捕获.
当用户在控件的边界外单击时,我在OnPreviewMouseDown中释放鼠标捕获.我没有把e.Handled设置为true.鼠标单击将转到主UI上的其他控件,但不会转到窗口的关闭按钮(红色X).它需要2次点击才能关闭应用.
有没有办法告诉WPF重新启动鼠标点击,或发送重复的鼠标点击事件?
这是我的代码.注意我将其重命名为MainMenuControl - 我没有构建菜单,因此Menu/MenuItem和Popup不是选项.
public class MainMenuControl : Control
{
static MainMenuControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MainMenuControl), new FrameworkPropertyMetadata(typeof(MainMenuControl)));
}
public MainMenuControl()
{
this.Loaded += new RoutedEventHandler(MainMenuControl_Loaded);
Mouse.AddPreviewMouseDownOutsideCapturedElementHandler(this, OnPreviewMouseDownOutsideCapturedElementHandler);
}
void MainMenuControl_Loaded(object sender, RoutedEventArgs e)
{
this.IsVisibleChanged += new DependencyPropertyChangedEventHandler(MainMenuControl_IsVisibleChanged);
}
void MainMenuControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (this.IsVisible)
{
Mouse.Capture(this, CaptureMode.SubTree);
Debug.WriteLine("Mouse.Capture");
}
}
// I was doing this in OnPreviewMouseDown, but changing to this didn't have any effect
private void OnPreviewMouseDownOutsideCapturedElementHandler(object sender, MouseButtonEventArgs e)
{
Debug.WriteLine("OnPreviewMouseDownOutsideCapturedElementHandler");
if (!this.IsMouseInBounds())
{ …Run Code Online (Sandbox Code Playgroud) 我正在开发一个项目,它一次从ftp服务器获取文件列表.此时,它返回文件的arrayref,或者如果qr传递了可选的正则表达式引用(即),则使用grep过滤列表.此外,如果它qr有一个捕获组,它会将捕获的部分视为版本号,而是返回一个hashref,其中键是版本,值是文件名(如果没有捕获组,它将作为数组返回).代码看起来像(稍微简化)
sub filter_files {
my ($files, $pattern) = @_;
my @files = @$files;
unless ($pattern) {
return \@files;
}
@files = grep { $_ =~ $pattern } @files;
carp "Could not find any matching files" unless @files;
my %versions =
map {
if ($_ =~ $pattern and defined $1) {
( $1 => $_ )
} else {
()
}
}
@files;
if (scalar keys %versions) {
return \%versions;
} else {
return \@files;
}
} …Run Code Online (Sandbox Code Playgroud) 有没有办法检测浏览器是否支持我正在构建的移动网站的HTML5 Media Capture API?我似乎只能找到检测getUserMedia()支持的解决方案.
我希望能够为移动用户提供以下两种方案之一:
我正在使用MediaStore.ACTION_IMAGE_CAPTURE意图捕获图像.它在大多数设备上运行良好.但它在一些最新的Android设备中无法正常工作.
我的意图是使用相机捕获图像并将其发送到服务器,但不将该图像存储在设备的默认库中.
**:当我捕获图像时,它会在onActivityResult方法中返回一些其他图库图像,而不是在某些最新的Android设备中捕获图像.我使用下面的代码来捕获和存储图像.
public void launchCamera(View v) {
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(camera, CAMERA_PIC_REQUEST );
}
Run Code Online (Sandbox Code Playgroud)
在onActivityResult方法中,
String[] projection = { MediaStore.Images.ImageColumns.SIZE,
MediaStore.Images.ImageColumns.DISPLAY_NAME,
MediaStore.Images.ImageColumns.DATA, BaseColumns._ID, };
Cursor c = null;
Uri u = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
try {
if (u != null) {
c = managedQuery(u, projection, null, null, null);
}
if ((c != null) && (c.moveToLast())) {
Bitmap thumbnail = getBitMapFromLocalPath(c.getString(2), 3);
idsImagesgot.add(thumbnail);
ContentResolver cr = getContentResolver();
cr.delete( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
BaseColumns._ID + "=" + c.getString(3), null);
}
} finally …Run Code Online (Sandbox Code Playgroud) 我有一个Window有元素WindowStyle="None"和AllowsTransparency="True",因此它没有标题栏和支持透明度.
我希望用户能够通过左键单击窗口中的任意位置并拖动来将窗口移动到屏幕上的任何位置.只要按下鼠标左键,窗口就会随鼠标一起拖动.
我能够使用这个功能有一个例外:当鼠标移动到窗口之外时(例如当在窗口边缘按下鼠标左键并且鼠标移动时),窗口不再捕获鼠标位置,不随鼠标拖动.
以下是我用来完成工作的代码隐藏代码:
public Point MouseDownPosition { get; set; }
public Point MousePosition { get; set; }
public bool MouseIsDown { get; set; }
private void window_MyWindowName_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
MouseDownPosition = e.GetPosition(null);
MouseIsDown = true;
}
private void window_MyWindowName_MouseMove(object sender, MouseEventArgs e)
{
if (MouseIsDown)
{
MousePosition = e.GetPosition(null);
Left += MousePosition.X - MouseDownPosition.X;
Top += MousePosition.Y - MouseDownPosition.Y;
}
}
private void window_MyWindowName_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
MouseIsDown = false; …Run Code Online (Sandbox Code Playgroud) AFAIK,C++ 11/14在定义lambda时不允许就地定义新的返回类型.但是,似乎C++ 14 lambda捕获表达式实际上创建了一个带有一个或多个"成员"和一个operator()的匿名类型.那么,为什么编译器不允许从lambda 外部访问捕获的成员.我的软弱无法处理C++的复杂性,但它听起来像是一种合理的语言扩展吗?这是一个例子.
vector<string> words = { "Stack", "Overflow" };
auto l = [w = words](){}; // almost like a C# anonymous type
cout << l.w[0]; // does not work.
Run Code Online (Sandbox Code Playgroud) 我有一个Android应用程序,它包含一个Button.
当您单击按钮时,应从相机捕获图像而不打开相机应用程序(图像应在后台捕获).
如何实现此功能?
任何建议都会有很大帮助.
非常感谢提前.
我是Android Camera2 API的新手.我只是将我的所有项目移动到新的Camera2 API.我使用Camera2Basic示例作为起点.
我现在通过添加以下内容来尝试缩放:
public boolean onTouchEvent(MotionEvent event) {
try {
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
CameraCharacteristics characteristics = manager.getCameraCharacteristics(mCameraId);
float maxZoom = (characteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM))*10;
Rect m = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
int action = event.getAction();
float current_finger_spacing;
if (event.getPointerCount() > 1) {
// Multi touch logic
current_finger_spacing = getFingerSpacing(event);
if(finger_spacing != 0){
if(current_finger_spacing > finger_spacing && maxZoom > zoom_level){
zoom_level++;
}
else if (current_finger_spacing < finger_spacing && zoom_level > 1){
zoom_level--;
}
int minW = (int) (m.width() / maxZoom);
int …Run Code Online (Sandbox Code Playgroud) 如何用Java上的鼠标指针捕获屏幕图像?知道我可以使用Robot类捕获屏幕,但它捕获屏幕而没有鼠标指针,所以这不是我的解决方案.
我想捕获iPhone屏幕的特定部分.我使用过UIGraphicsBeginImageContextWithOptions,但是无法用这个捕获屏幕的一部分.请帮我.