что, делают недействительным, обновляют методы, делают в VC ++

у меня есть маленькое сомнение относительно функций окна в C++. что точно "invalidate()" функция делает? что делает сообщение оно отправляет? когда мы должны назвать это? также, что "update()" функция? "invalidaterect()" работает подобный "invalidate()" функция?.

Спасибо

6
задан Naruto 2 February 2010 в 11:32
поделиться

2 ответа

Поставляемый Apple JVM 1.5

-121--4648397-

Эта ссылка может быть полезной

http://blog.chinaunix.net/u/9577/showart_1850111.html

Я не реализовал ее в полном объеме сам, но то, что я реализовал, работает

Обратите внимание, что она не полностью задокументирована и поэтому, вероятно, изменится в будущих версиях Android

EDIT:

Вот путь я реализовал код сам:

String url = "content://sms/"; 
        Uri uri = Uri.parse(url); 
        getContentResolver().registerContentObserver(uri, true, new MyContentObserver(handler)); 

        Uri uriSms = Uri.parse("content://sms/inbox");
        Cursor c = getContentResolver().query(uriSms, null,null,null,null); 

        Log.d("COUNT", "Inbox count : " + c.getCount());


}

class MyContentObserver extends ContentObserver { 

    public MyContentObserver(Handler handler) { 

        super(handler); 

    }

@Override public boolean deliverSelfNotifications() { 
    return false; 
    }

@Override public void onChange(boolean arg0) { 
    super.onChange(arg0);

     Log.v("SMS", "Notification on SMS observer"); 

    Message msg = new Message();
    msg.obj = "xxxxxxxxxx";

    handler.sendMessage(msg);

    Uri uriSMSURI = Uri.parse("content://sms/");
    Cursor cur = getContentResolver().query(uriSMSURI, null, null,
                 null, null);
    cur.moveToNext();
    String protocol = cur.getString(cur.getColumnIndex("protocol"));
    if(protocol == null){
           Log.d("SMS", "SMS SEND"); 
           int threadId = cur.getInt(cur.getColumnIndex("thread_id"));
           Log.d("SMS", "SMS SEND ID = " + threadId); 
           getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadId), null, null);

    }
    else{
        Log.d("SMS", "SMS RECIEVE");  
         int threadIdIn = cur.getInt(cur.getColumnIndex("thread_id"));
         getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadIdIn), null, null);
    }

}


} 

код прослушивает изменения в

Эта строка будет вам интересна, если вы хотите удалить SMS

getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadIdIn), null, null);

Вы должны удалить весь разговор, чтобы удалить SMS, я не смог просто удалить последнее сообщение разговора

-121--4594639-

CWnd:: Invalidate () аннулирует всю клиентскую область окна, что указывает на то, что область устарела, и должна быть перекрашена. Обычно это вызывается на элементе управления, который необходимо перерисовать. CWnd:: InvalidateRect () делает недействительной только часть окна.

При использовании функций Аннулировать сообщение WM _ PAINT будет выведено [ неверно; см. комментарии ] к очереди сообщений и обработанные в какой-то момент в будущем. CWnd:: StartWindow () отправляет (в отличие от сообщений) сообщение WM _ PAINT , в результате чего недействительные области немедленно перерисовываются.

Действительно, все это в документах.

7
ответ дан 16 December 2019 в 21:39
поделиться

Функция Invalidate отмечает область рисунка как недействительна. Этот флаг используется, когда окно перерисовывается, если область недействительна, она будет перерисовывать область, если не оставит область экрана, как это. Invalidate Invalidate Invalidates вся клиентская область данного объекта, недействительна, недействительна недействительна определенная область клиентской области. Функция обновления делает фактическую RedRaw.

Причина такого механизма, и не просто рисовать сразу, когда вы знаете, что что-то нужно изменить, состоит в том, что вы можете предотвратить множество перерисовков, скажем, например, вы получили три сообщения клавиш клавиши в одном Go, который прокручивает некоторую текстовую область. Если вы определите текстовую область для каждого из ключевых нажатий, вам придется нарисовать текстовую область три раза, и приложение станет не отвечает. Вместо этого обрабатывая все ключевые события, обновляя структуру данных, прикрепленную к области текста и недействием привязки текста, прежде чем перерисовать текстовую область, вы только один раз перерисовывают текстура только один раз.

1
ответ дан 16 December 2019 в 21:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: